早教吧 育儿知识 作业答案 考试题库 百科 知识分享

关于Matlabn=input('\n请输入分点数n:n=');x=-1:2/(n-1):1;fx=1./(1.+25.*x.^2);plot(x,fx,'ko');holdon;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-');holdon;fplot(fx,[-1,1],'b-');plot(x

题目详情
关于Matlabn=input('\n 请输入分点数n: n='); 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一样。