QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3324|回复: 1
打印 上一主题 下一主题

代码已出,最速下降法参数拟合,求改

[复制链接]
字体大小: 正常 放大
cpf933        

5

主题

3

听众

13

积分

升级  8.42%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2008-6-5 11:56 |只看该作者 |倒序浏览
|招呼Ta 关注Ta

tic

clc;clear;
syms x1 x2 x3 x4
t=[5 10 15 20 30 45 60 90 120];
p=[1;2;3;5;10;20;50;100];
i=[1.306 1.036 0.880 0.723 0.564 0.435 0.356 0.262 0.209
1.714 1.356 1.127 0.960 0.749 0.570 0.470 0.357 0.291
1.952 1.544 1.272 1.097 0.856 0.650 0.536 0.413 0.338
2.253 1.780 1.454 1.270 0.992 0.749 0.620 0.483 0.398
2.660 2.101 1.701 1.504 1.177 0.885 0.733 0.579 0.480
3.068 2.422 1.949 1.739 1.361 1.021 0.847 0.674 0.561
3.607 2.846 2.276 2.049 1.605 1.200 0.997 0.800 0.669
4.014 3.166 2.523 2.284 1.789 1.336 1.110 0.896 0.750];
for m=1:8
for n=1:9
F(m,n)=(x1.*(1+x2.*log(p(m,1)))/(t(1,n)+x3).^x4-i(m,n)).^2;
end
end
Q=sum(sum(F))
dQ1=diff(Q,x1);dQ2=diff(Q,x2);dQ3=diff(Q,x3);dQ4=diff(Q,x4);%对函数进行求一阶导
DQ=[dQ1;dQ2;dQ3;dQ4];
dQ11=diff(dQ1,x1);dQ12=diff(dQ1,x2);dQ13=diff(dQ1,x3);dQ14=diff(dQ1,x4);
dQ21=diff(dQ2,x1);dQ22=diff(dQ2,x2);dQ23=diff(dQ2,x3);dQ24=diff(dQ2,x4);
dQ31=diff(dQ3,x1);dQ32=diff(dQ3,x2);dQ33=diff(dQ3,x3);dQ34=diff(dQ3,x4);
dQ41=diff(dQ4,x1);dQ42=diff(dQ4,x2);dQ43=diff(dQ4,x3);dQ44=diff(dQ4,x4);
%这里进行求函数二阶导数
DQQ=[dQ11,dQ12,dQ13,dQ14;dQ21,dQ22,dQ23,dQ24;dQ31,dQ32,dQ33,dQ34;dQ41,dQ42,dQ43,dQ44];
%海赛矩阵
disp('x1 x2 x3 x4 分别代表 A c b n 取初值[20 0.9 10 1]')
x=input('请输入x1 x2 x3 x4的初始值为x=[x1 x2 x3 x4],x=:');
x=x';
%矩阵转置
E=input('请输入你所要求的最速下降法的精度数E=:');
%这里进行一些相关初始值的计算
T=[];
d=T;
TH=[];
%给d,t赋空矩阵
T(:,1)=subs(DQ,[x1,x2,x3,x4],[x(1),x(2),x(3),x(4)])
% T(:,1)指数组的第一列 res=subs(es,old,new)用new置换es中的old后产生res
TH=subs(DQQ,[x1,x2,x3,x4],[x(1),x(2),x(3),x(4)])
GG(1)=subs(Q,[x1,x2,x3,x4],[x(1),x(2),x(3),x(4)])
%这里进行一些相关初始值的计算
disp('由于你输入的初始值,这里将开始最速下降法搜寻:');
% 显示内容
for k=1:1000
d(:,1)=-T(:,1) %d(k)是x(k+1)=x(k)+R(k)*d(k)
%d(k)为计算搜索方向即负梯度方向
R(1)=(T(:,1)'*T(:,1))/(T(:,1)'*TH*T(:,1))
%R(k)为近似最佳步长
TH=subs(DQQ,[x1,x2,x3,x4],[x(1,k),x(2,k),x(3,k),x(4,k)])
T(:,k)=subs(DQ,[x1,x2,x3,x4],[x(1,k),x(2,k),x(3,k),x(4,k)])
d(:,k+1)=-T(:,k)
R(k)=(T(:,k)'*T(:,k))/(T(:,k)'*TH*T(:,k))
GG(k)=subs(Q,[x1,x2,x3,x4],[x(1,k),x(2,k),x(3,k),x(4,k)])
%while k>=2
%while GG(k)>=GG(k-1)
% R(k)=R(k)/2;
%end
% end
if norm(T(:,k))<E %norm() 范-2误差
disp(' ');
disp('QX就是最速下降法的解 ')
QX=subs(Q,[x1,x2,x3,x4],[x(1,k),x(2,k),x(3,k),x(4,k)])
disp(' ');
disp('对应的x值为 ');
x(:,k)
break;
end
x(:,k+1)=x(:,k)+R(k)*d(:,k)
8 q4 r" d6 P. _' s+ P
end
; j( T( E. k: L5 |" H
toc

给为兄弟姐妹,谁知道我编的这个哪里错了啊?

TH=subs(DQQ,[x1,x2,x3,x4],[x(1),x(2),x(3),x(4)]) 这句运行起来时间非常长。

有谁知道我这应该怎么改啊,希望好心人帮忙一下

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
dugumen 实名认证       

10

主题

6

听众

652

积分

升级  13%

  • TA的每日心情
    开心
    2014-7-23 20:50
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    新人进步奖

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2024-6-8 20:48 , Processed in 0.573244 second(s), 57 queries .

    回顶部