声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1363|回复: 3

[编程技巧] 程序问题

[复制链接]
发表于 2007-5-21 00:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
function ff=main(x,p,y,q,z,xx,yy)
% x y z 坐标向量 长度要一样
% p ,q 为拟合函数中x,y 的系数
% xx yy 为 需要拟合的数据 给出(x,y) 坐标 求z

A=leftmatrix (x,p,y,q);             % A*a_n=B
B=rightmatrix(x,p,y,q,z);

%a_n=inv(A)*B;
a_n=A\B;                          % 求a_n    inv(A)*B 效果不好 (存疑)

for i=1 : length(a_n)             % 把长为p*q 的 a_n 列向量 转还 成p x q  的 aa 矩阵
    ii=quotient(i-1,q)+1;         % quotient求商
    jj=mod(i-1,q)+1;               
    aa(ii,jj)=a_n(i,1);
end
                                   
ff=0;                              % ff 是 xx,yy 带入所拟合的函数 求出 z  
for i=1 : p                        % 函数为 aa(i,j)*x^i*y^j  (i=0...p  ,j=0...q)
    for j=1 : q                    % aa 为系数  p x q 的矩阵
        ff=ff+aa(i,j) * xx^(i-1) * yy^(j-1);
    end
end

function A=leftmatrix(x,p,y,q)
% A*a=B  a 即为系数列矩阵   
% A为左边(p-1)(q-1) 乘 (p-1)(q-1) 的矩阵
% x,y 为长度一样的列矩阵 也就是给定离散点的x,y坐标
% p,q为拟合的函数中x,y的指数

m=length(x);
if (nargin~=4) & (m~=length(y))
    error('error check check!');
end

A_length=p*q;                        % A 为p*q阶的方阵
A=zeros(A_length,A_length);          % 赋值0
for i=1 : p*q
    for j= 1 : p*q
        x_z=quotient(j-1,q)+quotient(i-1,q);     % x 的指数   quotient为求商
        y_z=mod(j-1,q)+mod(i-1,q);            % y 的指数
        A(i,j)=qiuhe(x,x_z,y,y_z);            
    end
end



function he=qiuhe(x,p,y,q,z)
% he    x^p*y^q 从1->m的和
% x,y 行向量 长度相同
% p,q 为x,y系数
%x=[2 3]; y=[3 4];
%p=2; q= 2;

m=length(x);
if (nargin<4 )&(m~=length(y))            %输入量至少为四,x,y行向量长度必需一样
    error('error check check!');
end
if nargin==4                            %没有 z , 默认为单位行向量
    z=ones(m,1);
end

he=0;
for i=1:m
    he=he+x(i)^p * y(i)^q*z(i);     % 1-->m 求和
end


function sh=quotient(x,y)
% sh 为 x/y 的商

sh=(x-mod(x,y))/y;


function B=rightmatrix(x,p,y,q,z)
% A*a=B  
% B  为一个列向量 长为p*q
% x y z 为点的坐标  
%p q 为x y指数

if nargin~=5  
    error('error check check! rightmatrix')
end

B=zeros(p*q,1);
for i=1 : p*q
    x_z=quotient(i-1,q);
    y_z=mod(i-1,q);
    B(i,1)=qiuhe(x,x_z,y,y_z,z);
end
这个程序用于曲线拟和 是从本论坛下的 我运行了一下还是有问题 由于本人很菜 请高手指点:程序中xx yy时指什么,我运行完发生错误 ??? Error using ==> main  Too many input arguments.  这是什么原因造成的。是不是程序对输入向量长度有限定if (nargin<4 )&(m~=length(y))    error('error check check!'); 对这句有疑问。

[ 本帖最后由 eight 于 2007-5-21 10:27 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-5-21 10:26 | 显示全部楼层
原帖由 red427 于 2007-5-21 00:31 发表
function ff=main(x,p,y,q,z,xx,yy)
% x y z 坐标向量 长度要一样
% p ,q 为拟合函数中x,y 的系数
% xx yy 为 需要拟合的数据 给出(x,y) 坐标 求z

A=leftmatrix (x,p,y,q);             % A*a_n=B
...



形式参数有多少个,实际参数就必须有多少个
发表于 2009-6-25 21:03 | 显示全部楼层
还是不懂,麻烦你说明白点,不胜感激!
我的输入是这样的
x=[1 2 3 4 5]; p=3; y=[1 2 3 4 5]; q=3; z=[10 11 12 13 14];
xx=[4 2 1 8 7]; yy=[4 2 1 8 7];
Warning: Matrix is singular to working precision.
> In qumiannihe at 17
??? Error using ==> mpower
Matrix must be square.
Error in ==> qumiannihe at 27
        ff=ff+aa(i,j) * xx^(i-1) * yy^(j-1);

[ 本帖最后由 ChaChing 于 2009-6-26 22:18 编辑 ]
发表于 2009-6-26 11:15 | 显示全部楼层

回复 地板 panlei 的帖子

看一下出错提示,估计你自己可以调试成功。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-22 08:27 , Processed in 0.063383 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表