关于Matlab
x=-1:2/(n-1):1;
fx=1./(1.+25.*x.^2);
plot(x,fx,'ko');hold on;
y=polyfit(x,fx,n-1);
cs=csapi(x,fx);
x=-1:0.01:1;
yy=polyval(y,x);
fx='1/(1+25*x^2)';
fnplt(cs,'m-');hold on;fplot(fx,[-1,1],'b-');plot(x,yy,'g-');grid on
legend('original points','cubic spline curve','exact function','interpolating polynomials')
x=-1:0.01:1;
fx=1./(1.+25.*x.^2);
yy=polyval(y,x);
s=max(abs(fx-yy));
fprintf('原函数与差值函数的最大误差为:');
disp(s)
x=-1:2/(n-1):1;
fx=1./(1.+25.*x.^2);
x1=-1:0.01:1;
fx1=1./(1.+25.*x1.^2);
s1=csapi(x,fx,x1);
s=max(abs(s1-fx1));
fprintf('三次样条函数与原函数的最大误差为:');
disp(s)
运行后
??? Error using ==> run at 56
Error: The input character is not valid in MATLAB statements or expressions.
第2个!
function coefs=cubicspline(x0,y0)
m=length(x0);
for i=1:m-1
h(i)=x0(i+1)-x0(i);
end
B=zeros(m-2,m-2);
for i=1:m-2
for j=1:m-2
switch i-j
case -1
B(i,j)=h(i+1);
case 0
B(i,j)=2*(h(i)+h(i+1));
case 1
B(i,j)=h(i);
end
end
end
for i=1:m-1
dd(i)=(y0(i+1)-y0(i))/(x0(i+1)-x0(i));
end
for i=1:m-2
c(i)=6*(dd(i+1)-dd(i));
end
c=c';
x1=B\c;
A=zeros(m,m);
A(2,1)=h(1);A(m-1,m)=h(m-1);
for i=2:m-1
for j=2:m-1
switch i-j
case -1
A(i,j)=h(i);
case 0
A(i,j)=2*(h(i)+h(i-1));
case 1
A(i,j)=h(i-1);
end
end
end
A,
b(1)=0;b(m)=0;
for i=2:m-1
b(i)=6*(dd(i)-dd(i-1));
end
b=b',
S1=[0.8;x1;0.2];
d=[0.8 0 0 0 0 0 0 0 0.2]';
c1=c-d;
x2=B\c1;
S=[0.8;x2;0.2],
fprintf('样条曲线的系数矩阵为:\n');
for i=1:m-1
coef_a(i)=(S(i+1)-S(i))/(6*h(i));
coef_b(i)=S(i)/2;
coef_c(i)=dd(i)-((2*h(i)*S(i)+h(i)*S(i+1))/6);
coef_d(i)=y0(i);
end
coefs=[coef_a',coef_b',coef_c',coef_d'];
x=[];
s=[];
for i=1:m-1
xx=linspace(x0(i),x0(i+1),30);
M=length(xx);
for k=1:M
ss(k)=coef_a(i)*(xx(k)-x0(i))^3+coef_b(i)*(xx(k)-x0(i))^2+coef_c(i)*(xx(k)-x0(i))+coef_d(i);
end
s=[s,ss];
x=[x,xx];
end
plot(x0,y0,'*',x,s,'b-');grid on
运行后
??? Input argument "x0" is undefined.
Error in ==> cubicspline at 2
m=length(x0);
哪出问题了?
高手帮忙改一下!感激不尽``` 展开
第一个在我机器上完美运行,可能是你的输入值有误,你输入一个大于1的整数试试。
第二个是一个函数式M文件,运行的时候需要输入参数,比如把这一段代码放到了M文件里,起一个名字,比如:叫做myfun.m ,随后,你要用的时候就可以按照函数开头写的那个格式调用这个函数了(和调用系统规定好的函数一样方便):即按照以下格式写:
coefs=cubicspline(x0,y0)
或cubicspline(x0,y0)的格式。
如果还不理解,我用下面一个例子来给你大致讲解一下函数式M文件:
定义一个函数,使该函数能够算出z=x.*y+x./y的值:
function z=myfun(x,y) %这一句是函数头,标示着函数的输入输出参数形式
z=x.*y+x./y; %可用一行或多行语句写出如何由输入参数算出输出参数
以后你想用算出当x=2,y=3时,x.*y+x./y的值时,就可以成下面的形式:
myfun(2,3)
这样,matlab就会按照函数中规定好的算法给你返回一个z的值了。
也可以这样用:mydata=myfun(2,3);这样,相当于把函数返回的值(z),赋值给了mydata
很可惜matlab应用的方向太多,而我对这方面的应用不熟悉。。
这两个程序应该都没错。
第一个是你没有输入正确的值。
第二个是你调用函数时调用错误,你大致看一下,x0,y0分别是什么意思,是用的前面哪里的数,比如它的x0,y0是你以前已经算出的一个x,y或已知的x,y(假定你把这个M文件命名为myfun.m),你在窗口中调用它时不要输入myfun或myfun().要输入z=myfun(x,y)或myfun(x,y) ————这里的x,y就是指这函数所需要的运算的数,比如我上面举例中的x,y一样。
2023-08-22 广告