给你两个例子做参考:
例一:
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=[000144 045
000144 0475
000144 0525
000144 055
000152 045
000152 0475
000152 0525
000152 055
000168 045
000168 0475
000168 0525
000168 055
000176 045
000176 0475
000176 0525
000176 055];
y = [4569110212
4424592344
4194713721
4058647715
4386413153
4202196312
4052672275
4119385838
4983122281
4592215843
4071631097
4028065749
4573223359
4481973606
4323365342
4249947777];
beta0=[400001 10818 -25844 06803 06928 -04830];
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阶单位矩阵,赋值给psi
p=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处的值,并赋给t
t=polyval(psi(k,:),x);
以psi的第k-1行作为多项式系数,计算多项式在x处的值,并赋给t
t1=polyval(psi(k-1,:),x);
%a等于 x与t中元素对应相乘,然后乘t的转置,再除以t乘t的转置
a=(xt)t'/(tt');
%b等于 t乘t的转置除以t1乘t1的转置
b=(tt')/(t1t1');
%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))-bpsi(k-1,:);
end %结束for循环标志
for k=1:m %for循环,k从1开始,步长为1,当k=m时,完成最后一次循环
t=polyval(psi(k+1,:),x); %以psi的第k+1行作为多项式系数,计算多项式在x处的值,并赋给t
p(k+1)=yt'/(tt'); %y乘t的转置,除以t乘t的转置
end %结束for循环标志
p=ppsi; %p乘psi,然后赋给p,传递到主程序。
function [Q,R]=gschmidt(V)
%基向量正交化的gschmidt程序,V=QR,Q为标准正交基
[m,n]=size(V);
R=zeros(n);Q=zeros(m,n);%初始化
R(1,1)=norm(V(:,1));
Q(:,1)=V(:,1)/R(1,1);
for k=2:n
R(1:k-1,k)=Q(:,1:k-1)'V(:,k);
Q(:,k)=V(:,k)-Q(:,1:k-1)R(1:k-1,k);
R(k,k)=norm(Q(:,k));
Q(:,k)=Q(:,k)/R(k,k);
end
以上就是关于高分求matlab程序 进行多项式拟合全部的内容,包括:高分求matlab程序 进行多项式拟合、matlab求向量组的基、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)