matlab中多项式插值,数值积分,多项式拟合,常微分方程数值解的几个小问题求解!
插值函数:interp数值积分:ode45比较常用数据拟合:polyfit函数微分方程:dsolve函数希望我的回答会对你有帮助!
matlab多项式拟合 解释
靠,ls的太强啦
高分求matlab程序 进行多项式拟合
给你两个例子做参考:例一:clc;clear;f=@(beta,x)(beta(1)+beta(2)*x(:,1)+beta(3)*x(:,2)+beta(4)*x(:,1).*x(:,1)-beta(4)+...beta(5)*x(:,2).*x(:,2)-beta(5)+beta(6)*x(:,1).*x(:,2));x=[0.00144 0.450.00144 0.4750.00144 0.5250.00144 0.550.00152 0.450.00152 0.4750.00152 0.5250.00152 0.550.00168 0.450.00168 0.4750.00168 0.5250.00168 0.550.00176 0.450.00176 0.4750.00176 0.5250.00176 0.55];y = [45.6911021244.2459234441.9471372140.5864771543.8641315342.0219631240.5267227541.1938583849.8312228145.9221584340.7163109740.2806574945.7322335944.8197360643.2336534242.49947777];beta0=[40.0001 1.0818 -2.5844 0.6803 0.6928 -0.4830];beta=nlinfit(x,y,f,beta0);例2:function p=naorthfit(x,y,m)%用途:多项式拟合%格式:x,y为数据向量,m为拟合正交多项式次数,p返回多项式%系数降幂排列psi=fliplr(eye(m+1,m+1));%转动m+1阶单位矩阵,赋值给psip=zeros(1,m+1);%p是1×(m+1)阶的零矩阵psi(2,m+1)=-sum(x)/length(x);%将psi(矩阵)中的第2行、第(m+1)列的元素变为x的和除x的长度的负值。for k=2:m %循环,k从2开始,每次步长为1,当k=m时,完成最后一次循环%以psi的第k行作为多项式系数,计算多项式在x处的值,并赋给tt=polyval(psi(k,:),x);以psi的第k-1行作为多项式系数,计算多项式在x处的值,并赋给tt1=polyval(psi(k-1,:),x);%a等于 x与t中元素对应相乘,然后乘t的转置,再除以t乘t的转置a=(x.*t)*t"/(t*t");%b等于 t乘t的转置除以t1乘t1的转置b=(t*t")/(t1*t1");%psi的第k+1行元素为%以1和-a为系数的多项式乘以以psi的第k行、第2到(m+1)列作为系数的多项式。%减去b乘psi的第k-1行psi(k+1,:)=conv([1 -a],psi(k,2:m+1))-b*psi(k-1,:);end %结束for循环标志for k=1:m %for循环,k从1开始,步长为1,当k=m时,完成最后一次循环t=polyval(psi(k+1,:),x); %以psi的第k+1行作为多项式系数,计算多项式在x处的值,并赋给tp(k+1)=y*t"/(t*t"); %y乘t的转置,除以t乘t的转置end %结束for循环标志p=p*psi; %p乘psi,然后赋给p,传递到主程序。
怎么用Matlab来实现切比雪夫多项式拟合?已有数据x=[...],y=[...]离散数据
我这有个例子挺好看看应该明白!e(x0,y0,x)n=length(x0);m=length(x);for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(z-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y(i)=s;endSOR迭代法的Matlab程序 function [x]=SOR_iterative(A,b)% 用SOR迭代求解线性方程组,矩阵A是方阵 x0=zeros(1,length(b)); % 赋初值 tol=10^(-2); % 给定误差界 N=1000; % 给定最大迭代次数 [n,n]=size(A); % 确定矩阵A的阶 w=1; % 给定松弛因子 k=1; % 迭代过程 while k=N x(1)=(b(1)-A(1,2:n)*x0(2:n)")/A(1,1); for i=2:n x(i)=(1-w)*x0(i)+w*(b(i)-A(i,1:i-1)*x(1:i-1)"-A(i,i+1:n)*x0(i+1:n)")/A(i,i); end if max(abs(x-x0))=tol fid = fopen("SOR_iter_result.txt", "wt"); fprintf(fid," ********用SOR迭代求解线性方程组的输出结果******** "); fprintf(fid,"迭代次数: %d次 ",k); fprintf(fid,"x的值 "); fprintf(fid, "%12.8f ", x); break; end k=k+1; x0=x; end if k==N+1 fid = fopen("SOR_iter_result.txt", "wt"); fprintf(fid," ********用SOR迭代求解线性方程组的输出结果******** "); fprintf(fid,"迭代次数: %d次 ",k); fprintf(fid,"超过最大迭代次数,求解失败!"); fclose(fid); end
如何用matlab实现切比雪夫多项式拟合? 要源代码
用切比雪夫多项式逼近已知函数function f = Chebyshev(y,k,x0)syms t;T(1:k+1) = t;T(1) = 1;T(2) = t;c(1:k+1) = 0.0;c(1)=int(subs(y,findsym(sym(y)),sym("t"))*T(1)/sqrt(1-t^2),t,-1,1)/pi;c(2)=2*int(subs(y,findsym(sym(y)),sym("t"))*T(2)/sqrt(1-t^2),t,-1,1)/pi;f = c(1)+c(2)*t;for i=3:k+1 T(i) = 2*t*T(i-1)-T(i-2); c(i) = 2*int(subs(y,findsym(sym(y)),sym("t"))*T(i)/sqrt(1-t^2),t,-1,1)/2; f = f + c(i)*T(i); f = vpa(f,6); if(i==k+1) if(nargin == 3) f = subs(f,"t",x0); else f = vpa(f,6); end endend
切比雪夫多项式拟合为什么没有龙格现象
并非如此,使用多项式拟合时,采用的是最小二乘的标准。 如果某些点的数据偏差较大,多项式拟合时次数越高,拟合准确度反而下降。一般说来,选择次数越高,样本数据的结果更好,但是测试数据的结果反而会下降