matlab cftool 自定义拟合公式 a*exp(b*(x-c)*(1-(x-c)/(4100-2c)))应该改成
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/11 03:21:19
matlab cftool 自定义拟合公式 a*exp(b*(x-c)*(1-(x-c)/(4100-2c)))应该改成什么样系统才接受
系统提示
Expression a.*exp((4100.*b.*x-4100.*b.*c-b.*x.^2+b.*c.^2)./(4100-2c)) is not a valid MATLAB expression,
has non-scalar coefficients, or cannot be evaluated:
Error in fittype expression ==> a.*exp((4100.*b.*x-4100.*b.*c-b.*x.^2+b.*c.^2)./(4100-2c))
? Error: Missing MATLAB operator.
系统提示
Expression a.*exp((4100.*b.*x-4100.*b.*c-b.*x.^2+b.*c.^2)./(4100-2c)) is not a valid MATLAB expression,
has non-scalar coefficients, or cannot be evaluated:
Error in fittype expression ==> a.*exp((4100.*b.*x-4100.*b.*c-b.*x.^2+b.*c.^2)./(4100-2c))
? Error: Missing MATLAB operator.
你的式子两边取对数可以化成多项式的形式,多项式的系数都是a,b,c的函数,你通过多项式拟合得到了多项式的系数,就能求得a、b、c了
再问: 试过....解出来貌似是a/b=a/b,最后会缺一个方程.....
再答: 我刚推导了, 是个二次方程,有三个系数的,就有三个方程,正好三个参数,能解的,你再试试!
再问: 多谢不厌其烦的讲解 化成二次,结果(-x^2+4100x-4100c+c^2)(b/(4100+2c))+log(a), 参数是abc x^2和x 的系数是成“固定代数比例关系”的...二次型拟合出来的a*和b*之比恰好4100.......... 要哭了.....什么事啊!,代入-b/(4100+2c))=a*,4100(b/(4100+2c))=b*,结果(b/(4100+2c))=(b/(4100+2c))--------就如同俩方程分别是x=y 和 2x=2y 即三个方程俩有用 如果(b/(4100+2c))不=(b/(4100+2c)更麻烦.......
再答: (-x^2+4100x-4100c+c^2)(b/(4100-2c))+log(a), 多项式的系数为 A=-b/(4100-2c) B=4100b/(4100-2c) C=(c^2-4100c)/(4100-2c)+log(a) 你这样得到的结果显然A和B是一个方程,这时候b和c形成了一个超定方程。需要求解超定方程了!
再问: 我凑合弄一个吧,这东西有些时候比excel麻烦..........
再答: 下面是我写的一个文章,你看看吧,或许有帮助! 利用matlab进行一维数据的多项式拟合我们已经很熟悉了,但在科学研究中,很多问题既不是一维的,也不是多项式能够描述的。这个问题难住了很多人,其实这是很简单的。 下面我们对这样一个函数进行拟合,z=a*x+b*ln(y/x)+c,已知x、y和z分别为 x=[31.67 61.67 101.67 131.67 151.67]; y=[10.13 9.51 7.01 5.9 5.13]; z=[6.26 3.46 1.005 -0.4 -1.25]; 求a、b、c 方法一: matlab提供了一些用于非线性函数拟合的函数,但很多人都不知道或不会用,因为它要用到函数句柄。下面是使用函数拟合的方法 x=[31.67 61.67 101.67 131.67 151.67]; y=[10.13 9.51 7.01 5.9 5.13]; z=[6.26 3.46 1.005 -0.4 -1.25]; m=y./x; f=@(p,x)(p(1)*x(1,:)+p(2)*log((x(2,:)))+p(3)); p=lsqcurvefit(f,rand(1,3),[x;m],z) 在这里面定义了一个f,这就是一个函数句柄,以@开头,括号内是函数的自变量,后面是函数。 lsqcurvefit函数调用中第一个参数是函数句柄,第二个参数是迭代初值,第三个是自变量,第四个是函数值。 这端程序的结果是 p = 0.0197 4.3549 10.5351 方法二: matlab提供了矩阵的右除(“\”)和左除(“/”)功能,两者是不同的,在这里我们需要使用右除功能! 矩阵的右除相当于解方程Ax=b的根。如果方程数大于自变量的数,则求最小二乘解。 x=[31.67 61.67 101.67 131.67 151.67]; y=[10.13 9.51 7.01 5.9 5.13]; z=[6.26 3.46 1.005 -0.4 -1.25]; A=[x',log(y./x)',ones(size(x))']; b=z'; p=(A\b)' 这段程序的结果是 p = 0.0197 4.3549 10.5351 可见两者的结果是一模一样的。 那么这两种方法有没有区别呢,是有的,第一种是直接的非线性函数拟合,第二种其实是把一个非线性的函数转化成了一个线性的方程。如果需要拟合的函数不能转化线性函数的形式,那么就只能使用第一种方法,如果可以转化成线性函数的形式,则两者方法均可,建议使用第二种!
再问: 搞定了。。汗 cftool 用公式a*exp((4100*b.*x-4100*b*c-b.*x.^2+b*c^2)/(4100-2*c)) ,这个格式.....
再问: 试过....解出来貌似是a/b=a/b,最后会缺一个方程.....
再答: 我刚推导了, 是个二次方程,有三个系数的,就有三个方程,正好三个参数,能解的,你再试试!
再问: 多谢不厌其烦的讲解 化成二次,结果(-x^2+4100x-4100c+c^2)(b/(4100+2c))+log(a), 参数是abc x^2和x 的系数是成“固定代数比例关系”的...二次型拟合出来的a*和b*之比恰好4100.......... 要哭了.....什么事啊!,代入-b/(4100+2c))=a*,4100(b/(4100+2c))=b*,结果(b/(4100+2c))=(b/(4100+2c))--------就如同俩方程分别是x=y 和 2x=2y 即三个方程俩有用 如果(b/(4100+2c))不=(b/(4100+2c)更麻烦.......
再答: (-x^2+4100x-4100c+c^2)(b/(4100-2c))+log(a), 多项式的系数为 A=-b/(4100-2c) B=4100b/(4100-2c) C=(c^2-4100c)/(4100-2c)+log(a) 你这样得到的结果显然A和B是一个方程,这时候b和c形成了一个超定方程。需要求解超定方程了!
再问: 我凑合弄一个吧,这东西有些时候比excel麻烦..........
再答: 下面是我写的一个文章,你看看吧,或许有帮助! 利用matlab进行一维数据的多项式拟合我们已经很熟悉了,但在科学研究中,很多问题既不是一维的,也不是多项式能够描述的。这个问题难住了很多人,其实这是很简单的。 下面我们对这样一个函数进行拟合,z=a*x+b*ln(y/x)+c,已知x、y和z分别为 x=[31.67 61.67 101.67 131.67 151.67]; y=[10.13 9.51 7.01 5.9 5.13]; z=[6.26 3.46 1.005 -0.4 -1.25]; 求a、b、c 方法一: matlab提供了一些用于非线性函数拟合的函数,但很多人都不知道或不会用,因为它要用到函数句柄。下面是使用函数拟合的方法 x=[31.67 61.67 101.67 131.67 151.67]; y=[10.13 9.51 7.01 5.9 5.13]; z=[6.26 3.46 1.005 -0.4 -1.25]; m=y./x; f=@(p,x)(p(1)*x(1,:)+p(2)*log((x(2,:)))+p(3)); p=lsqcurvefit(f,rand(1,3),[x;m],z) 在这里面定义了一个f,这就是一个函数句柄,以@开头,括号内是函数的自变量,后面是函数。 lsqcurvefit函数调用中第一个参数是函数句柄,第二个参数是迭代初值,第三个是自变量,第四个是函数值。 这端程序的结果是 p = 0.0197 4.3549 10.5351 方法二: matlab提供了矩阵的右除(“\”)和左除(“/”)功能,两者是不同的,在这里我们需要使用右除功能! 矩阵的右除相当于解方程Ax=b的根。如果方程数大于自变量的数,则求最小二乘解。 x=[31.67 61.67 101.67 131.67 151.67]; y=[10.13 9.51 7.01 5.9 5.13]; z=[6.26 3.46 1.005 -0.4 -1.25]; A=[x',log(y./x)',ones(size(x))']; b=z'; p=(A\b)' 这段程序的结果是 p = 0.0197 4.3549 10.5351 可见两者的结果是一模一样的。 那么这两种方法有没有区别呢,是有的,第一种是直接的非线性函数拟合,第二种其实是把一个非线性的函数转化成了一个线性的方程。如果需要拟合的函数不能转化线性函数的形式,那么就只能使用第一种方法,如果可以转化成线性函数的形式,则两者方法均可,建议使用第二种!
再问: 搞定了。。汗 cftool 用公式a*exp((4100*b.*x-4100*b*c-b.*x.^2+b*c^2)/(4100-2*c)) ,这个格式.....