关于Matlab

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

哪出问题了?
高手帮忙改一下!感激不尽```
展开
 我来答
辩一辩
2009-05-22 · TA获得超过412个赞
知道答主
回答量:136
采纳率:0%
帮助的人:175万
展开全部

第一个在我机器上完美运行,可能是你的输入值有误,你输入一个大于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一样。

俊永翼F
高粉答主

2020-06-16 · 说的都是干货,快来关注
知道答主
回答量:8.1万
采纳率:3%
帮助的人:3974万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式