LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1021|回复: 1

一个简单的scilab程序

[复制链接]
发表于 2004-7-18 10:39:33 | 显示全部楼层 |阅读模式
在大学中,不免要做实验,一做实验就不免要画图来拟合曲线。手工拟合固然可行,但不免不准确。目前,最常用的是用最小二乘法拟合,拟合出的多项式还可用于插值。matlab中就自带了这个功能。scilab中有一个最小二乘函数lsq,好像用处也不是很大,于是自己编了一个。这也是我的第一个scilab程序。
该程序如下:
function y=fitting(a,b,n)              //定义函数
if length(a)<>length(b) then           //如果两个向量元素个数不相等
abort,                                //则退出,
end;
if n>=length(a) then                   //如果设定的多项式次数过高
abort,                                //则退出
end;
for i=1:length(a),for j=1n+1),
X(i,j)=a(1,i)^(j-1);end;end;           //构造X矩阵        
A=inv(X'*X)*X'*b',                     //计算系数矩阵
y=poly(A,"x","coeff")                  //生成多项式
endfunction                            //结束函数定义
用法:
函数名为fitting,a为测量标度,即x;b为测量值,即为y;n为所拟合出的多项式的次数。
例子:
-->x=[0 1 2 2];
-->y=[0.3 2.2 3 4];
-->exec("fitting.sce");
-->z=fitting(x,y,1)
z=
  0.4090909 + 1.5727273x
以上就是构造一次多项式,如要更精确一点,就将n设为2,或3,这个例子中n最多只能为3,如果n太大,则方程组无解,即无法运算。n必须小于测定的次数。
这次发帖只是想让大家关心maxima,scilab,octave等开源数学软件,由于重装系统,明幽原先写的那些scilab程序一扫而光,花了点时间把这个恢复出来,也不是很完善。但这几日将回衢州实习,恐无机会发帖,于是就将这个小东西提前发出来了。
希望大家能在关注美化桌面,听听mp3,看看碟的同时,也玩玩数学,它就在我们身边。
 楼主| 发表于 2004-7-18 10:41:30 | 显示全部楼层
上面那个头像原本是个冒号(:),不知道怎么跑出来的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表