关于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%
帮助的人:173万
展开全部

第一个在我机器上完美运行,可能是你的输入值有误,你输入一个大于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 广告
北京康科达科技有限公司是一家专业从事放射治疗配套设备及耗材生产、经营的科技企业。客户面向全国的疾控中心和放疗科医院。主营电离室、放疗剂量仪、放疗自动扫描水箱、调强验证系统、放疗质控设备、激光定位系统、放疗定位产品、放疗定位膜、放疗模室产品、... 点击进入详情页
本回答由康科达提供
俊永翼F
高粉答主

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

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式