happybaby 发表于 2005-10-23 09:52

[求助]新手求助

<P>我不懂matlab可是要用它解题,而且还急用 ,各位大哥大姐帮帮忙吧,谢谢了!<br><br><br>    用三次样条插值的三湾矩法,编制第一种和第二种边界条件的程序,数据如下:<br>      x   0.2               0.4               0.6               0.8            1.0</P>
<P>   f(x)    0.9798652   0.9177710   0,8080348   0.6386093   0.3843735</P>
<P>   求f(x)的三次样条插值函数S(x),满足:<br>            (1)自然边界条件S''(0.2)=S(0.1)=0<br>            (2)第一种边界条件 要求输出用追赶法解出的弯矩向量(M0,M1,M2,M3,M4)   和S(0.2+0.1i)(i=0,.......8)的值 ,并画出y=S(x)的图形<br><br><br><br><br>如果你有时间我还有一道题要麻烦你,不过要是写起来太麻烦就算了,谢谢</P>
<P>给出积分 </P>
<P> (1)I=[从0到2积分] {x的平方乘以}<br> (2)I=[积分从二分之派到四分之三排] <br> (3)I=[积分从2到3] [(x的平方减1)分之1]<br>(1) 用隆贝格求积计算上述积分I的值,要求到T[上标(0),下标K-1]减去T[上标(0),下标k]的绝对值小于10的负六次方是结束,输出T表和I的近 似值<br>(2) 用5点高斯求积公式及复化3点高斯求积公式计算上述积分,并输出I的近似值<br>(3) 分析比较各种计算结果<br>      <br>不知道你能不能看懂,呵呵,数学表达式我不会写!<br><br></P>
[此贴子已经被作者于2005-10-23 11:39:40编辑过]

glise 发表于 2005-10-23 10:14

回复:(happybaby)[求助]新手求助

<STRONG>matlab 中三次样条插值算法<BR><BR></STRONG>h0=figure('toolbar','none',...<BR>    'position',,...<BR>    'name','实例86');<BR>h1=axes('parent',h0,...<BR>    'position',,...<BR>    'visible','off');<BR>x=0:0.2:2*pi;<BR>y=sin(x);<BR>plot(x,y)<BR>b1=uicontrol('parent',h0,...<BR>    'units','points',...<BR>    'tag','b1',...<BR>    'style','pushbutton',...<BR>    'string','三次样条插值',...<BR>    'backgroundcolor',,...<BR>    'position',,...<BR>    'callback',[...<BR>      'y=0,',...<BR>      'sy=0,',...<BR>      'strn1=get(e2,''string'');,',...<BR>      'n1=str2num(strn1);,',...<BR>      'strn2=get(e3,''string'');,',...<BR>      'n2=str2num(strn2);,',...<BR>      'x=n1:0.2:n2;,',...<BR>      'i=1;,',...<BR>      'for t=n1:0.2:n2,',...<BR>      'y(i)=sin(t);,',...<BR>      'sy(i)=san(t,n1,n2);,',...<BR>      'i=i+1;,',...<BR>      'end,',...<BR>      'plot(x,y,''b*'',x,sy,''r-''),',...<BR>      'axis(),',...<BR>      'legend(''sin(x)'',''N-Hermite插值'')']);<BR>b2=uicontrol('parent',h0,...<BR>    'units','points',...<BR>    'tag','b2',...<BR>    'style','pushbutton',...<BR>    'string','误差比较',...<BR>    'backgroundcolor',,...<BR>    'position',,...<BR>    'callback',[...<BR>      'strdn1=get(e2,''string'');,',...<BR>      'n1=str2num(strdn1);,',...<BR>      'strdn2=get(e3,''string'');,',...<BR>      'n2=str2num(strdn2);,',...<BR>      'strdn=get(e1,''string'');,',...<BR>      'dn=str2num(strdn);,',...<BR>      'dd=abs(sin(dn)-san(dn,n1,n2));,',...<BR>      'msgbox([''误差为:'',num2str(dd)],''计算结果'')']);<BR>e1=uicontrol('parent',h0,...<BR>    'units','points',...<BR>    'tag','e1',...<BR>    'style','edit',...<BR>    'fontsize',12,...<BR>    'string','1.20',...<BR>    'horizontalalignment','right',...<BR>    'backgroundcolor',,...<BR>    'position',);<BR>t1=uicontrol('parent',h0,...<BR>    'units','points',...<BR>    'tag','t1',...<BR>    'style','text',...<BR>    'string','误差点:',...<BR>    'fontsize',12,...<BR>    'backgroundcolor',,...<BR>    'position',);<BR>e2=uicontrol('parent',h0,...<BR>    'units','points',...<BR>    'tag','e2',...<BR>    'style','edit',...<BR>    'fontsize',12,...<BR>    'string','1.00',...<BR>    'horizontalalignment','right',...<BR>    'backgroundcolor',,...<BR>    'position',);<BR>t2=uicontrol('parent',h0,...<BR>    'units','points',...<BR>    'tag','t2',...<BR>    'style','text',...<BR>    'string','第一节点:',...<BR>    'fontsize',12,...<BR>    'backgroundcolor',,...<BR>    'position',);<BR>e3=uicontrol('parent',h0,...<BR>    'units','points',...<BR>    'tag','e3',...<BR>    'style','edit',...<BR>    'fontsize',12,...<BR>    'string','3.00',...<BR>    'horizontalalignment','right',...<BR>    'backgroundcolor',,...<BR>    'position',);<BR>t3=uicontrol('parent',h0,...<BR>    'units','points',...<BR>    'tag','t3',...<BR>    'style','text',...<BR>    'string','第二节点:',...<BR>    'fontsize',12,...<BR>    'backgroundcolor',,...<BR>    'position',);<BR>b3=uicontrol('parent',h0,...<BR>    'units','points',...<BR>    'tag','b3',...<BR>    'style','pushbutton',...<BR>    'string','关闭',...<BR>    'backgroundcolor',,...<BR>    'position',,...<BR>    'callback','close');

happybaby 发表于 2005-10-23 11:21

真实太感谢了,<BR>老师让交程序,我直接把它交上去就可以了吧?<BR>

gghhjj 发表于 2005-10-23 11:32

回复:(happybaby)[求助]新手求助

呵呵,他给出的好象只是作图方法,里边没有插值在内,只是做了一条正弦曲线<BR><BR>插值方面还要自己写

happybaby 发表于 2005-10-23 11:36

可我是一点也不懂啊,能不能帮帮忙,今天就要交了

happybaby 发表于 2005-10-23 11:39

<P>如果你有时间我还有一道题要麻烦你,不过要是写起来太麻烦就算了,谢谢</P>
<P>给出积分 </P>
<P> (1)I=[从0到2积分] {x的平方乘以}<BR> (2)I=[积分从二分之派到四分之三排] <BR> (3)I=[积分从2到3] [(x的平方减1)分之1]<BR>(1) 用隆贝格求积计算上述积分I的值,要求到T[上标(0),下标K-1]减去T[上标(0),下标k]的绝对值小于10的负六次方是结束,输出T表和I的近 似值<BR>(2) 用5点高斯求积公式及复化3点高斯求积公式计算上述积分,并输出I的近似值<BR>(3) 分析比较各种计算结果<BR>      <BR>不知道你能不能看懂,呵呵,数学表达式我不会写!<BR></P>

gghhjj 发表于 2005-10-23 11:46

回复:(happybaby)[求助]新手求助

<P>我这里有一个现成的满足你要求的子程序,你可以看看<BR>你自己琢磨一下怎么调用吧,我现在没时间<BR><BR>function =yjc(X,Y,fb0,fe0,XX,a)<BR>%其中X,Y矩阵分别为点(x(i),y(i)]<BR>%fb0,feo表示当a=1是为第一边界条件否则为自然边界条件<BR>K=length(XX);%待求点的个数<BR>N=length(X);%输入点的个数<BR>H=diff(X); %建立H矩阵其元素H(i)=X(i+1)-X(i)<BR>F=diff(Y)./H;%建立F矩阵其元素为F(i)=f<BR>for i=2:N-1<BR>D(i)=6*(F(i)-F(i-1))/(H(i-1)+H(i));<BR>U(i-1)=H(i-1)/(H(i-1)+H(i));<BR>R(i)=H(i)/(H(i-1)+H(i));<BR>end</P>
<P>if (a==1)%判断是第一边界条件还是自然边界条件<BR>D(1)=6*(F(1)-fb0)/H(1);<BR>D(N)=6*(fe0-F(N-1))/H(N-1);<BR>U(N-1)=1;<BR>R(1)=1;%建立矩阵U,R,D,为用追赶法求解做准备<BR>else<BR>R(1)=0;<BR>U(N-1)=0;<BR>D(1)=2*fb0;<BR>D(N)=2*fe0;<BR>end<BR>%E=2*eye(N);<BR>%U=diag(U,-1);<BR>%R=diag(R,1);<BR>%EE=E+R+U;<BR>%下面为用追赶法求解M<BR>B(1)=R(1)/2;<BR>for i=2:N-1<BR>B(i)=R(i)/(2-U(i-1)*B(i-1));<BR>end<BR>YY(1)=D(1)/2;<BR>for i=2:N<BR>YY(i)=(D(i)-U(i-1)*YY(i-1))/(2-U(i-1)*B(i-1));<BR>end<BR>M(N)=YY(N);<BR>for i=N-1:-1:1<BR>M(i)=YY(i)-B(i)*M(i+1);<BR>end<BR>%求出系数矩阵S<BR>for k=1:N-1<BR>S(k,1)=(M(k+1)-M(k))/(6*H(k));<BR>S(k,2)=M(k)/2;<BR>S(k,3)=(Y(k+1)-Y(k))/H(k)-H(k)*(2*M(k)+M(k+1))/6;<BR>S(k,4)=Y(k);<BR>end<BR>for j=1:K<BR>for i=1:N-1<BR>if((XX(j)&gt;=X(i))&amp;(XX(j)&lt;=X(i+1)))<BR>YT(j)=polyval(S(i,:),XX(j)-X(i));<BR>end<BR>end<BR>end<BR>%处理字符串用作画图<BR>t4='';<BR>for i=1:N-1<BR>t1=['x',int2str(i),'=X(',int2str(i),'):H(',int2str(i),')/100:X(',int2str(i),'+1);y',int2str(i),'=polyval(S(',int2str(i),',:),','x',int2str(i),'-X(',int2str(i),'));'];<BR>执行(t1);<BR>if(i==N-1)<BR>t4=;<BR>else<BR>t4=;<BR>end<BR>end<BR>t5=['plot','(',t4,')'];</P>

happybaby 发表于 2005-10-23 11:51

谢谢了

happybaby 发表于 2005-10-23 12:05

那位大哥帮我写一下第二题,在线等,谢谢了先
[此贴子已经被作者于2005-10-23 12:05:54编辑过]

frogfish 发表于 2005-10-23 15:09

回复:(happybaby)[求助]新手求助

高斯积分,这是10点法的,该一下就可以变成5点法和3点法了<br><br>/******************************************************************** <br>* 用高斯10点法计算函数f(x)从a到b的积分值 <br>* 输入: f--函数f(x)的指针 <br>*       a--积分下限 <br>*       b--积分上限 <br>* 输出: 返回值为f(x)从a点到b点的积分值 <br>*******************************************************************/ <br>double gauss_legendre(double(*f)(double),double a,double b) <br>{ <br>const int n=10; <br>const double z={-0.9739065285,-0.8650633677,-0.6794095683, <br>-0.4333953941,-0.1488743390,0.1488743390, <br>0.4333953941,0.6794095683,0.8650633677, <br>0.9739065285}; <br>const double w={0.0666713443,0.1494513492,0.2190863625, <br>0.2692667193,0.2955242247,0.2955242247, <br>0.2692667193,0.2190863625,0.1494513492, <br>0.0666713443}; <br>double y,gg; <br>int i; <br>gg=0.0; <br>for(i=0;i&lt;n;i++) <br>{ <br>y=(z*(b-a)+a+b)/2.0; <br>gg+=w*(*f)((double)y); <br>} <br>return((double)((gg*(b-a)/2.0))); <br>} <br>
[此贴子已经被作者于2005-10-23 15:11:32编辑过]

frogfish 发表于 2005-10-23 15:16

回复:(happybaby)如果你有时间我还有一道题要麻烦你...

<DIV class=quote><B>以下是引用<I>happybaby</I>在2005-10-23 11:39:00的发言:</B><BR>
<P>如果你有时间我还有一道题要麻烦你,不过要是写起来太麻烦就算了,谢谢</P>
<P>给出积分 </P>
<P>(1)I=[从0到2积分] {x的平方乘以}<BR>(2)I=[积分从二分之派到四分之三排] <BR>(3)I=[积分从2到3] [(x的平方减1)分之1]<BR>(1) 用隆贝格求积计算上述积分I的值,要求到T[上标(0),下标K-1]减去T[上标(0),下标k]的绝对值小于10的负六次方是结束,输出T表和I的近 似值<BR>(2) 用5点高斯求积公式及复化3点高斯求积公式计算上述积分,并输出I的近似值<BR>(3) 分析比较各种计算结果<BR>      <BR>不知道你能不能看懂,呵呵,数学表达式我不会写!<BR></P></DIV>
<br>longberg的自己写一下吧,挺简单的

1314 发表于 2006-6-6 21:57

望各位大哥大姐回帖,小弟在此先谢了!

<P>e(自然对数)的的负y的平方的不定积分能不能求出来?如果能求出来有没有具体的表达式?</P>
页: [1]
查看完整版本: [求助]新手求助