声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3971|回复: 1

[编程技巧] FMINCON only accepts inputs of data type double.

[复制链接]
发表于 2011-7-16 10:39 | 显示全部楼层 |阅读模式

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

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

x
我的程序如下:
主程序:

n=input('enter a value for n\n=')
a1=0.2875;
kmax=1.33;

x0=zeros(n,1);
A=[];
b=[];
Aeq=data_preprocess(a1,kmax);
beq=xlsread('F:\Program Files\work\DATA','sheet1','H4:H33');
lb=zeros(n,1);
ub=[];

[x,fval,exitflag,output] = fmincon(@myobjfun,x0,A,b,@data_preprocess(a1,kmax),beq,lb,ub);

子函数:myobjfun
function f = myobjfun(x)
f = sum(diff(x).^2);

子函数data_preprocess
function Aeq=data_preprocess(a1,kmax)
%从EXCEL表格中读取TBP(END T)数据,T(K)
TBP=xlsread('F:\Program Files\work\DATA','sheet1','G3:G33')    %待完善:sheet1、以及G3:G33如何用n表示

%计算标准温度\theta
o1=TBP(1);
o2=TBP(31);
T=(TBP-o1)/(o2-o1)

%计算速率常数k
o3=1/a1
o4=T.^o3
k=o4.*kmax


%计算a(i,1)和a(i,2)
for i=1:30                       
     m1=k(i)-k(i+1);
     m2=30*31*a1/kmax^a1;              
     m3=k(i+1)^(a1+1)/(a1+1);
     m4=k(i+1)^(a1+1)/a1;
     m5=k(i)^(a1+1)/(a1+1);
     m6=k(i+1)*k(i)^a1/a1;
     m7=k(i)*k(i+1)^a1/a1;
     m8=k(i)^(a1+1)/a1;
  a(i,1)=(1/m1)*m2*((m3-m4)-(m5-m6));
  a(i,2)=(1/(-m1))*m2*((m3-m7)-(m5-m8));
end


for i=1:30                                   
Aeq(i,i)=a(i,1);
    Aeq(i,i+1)=a(i,2);
end
disp(Aeq);

然后运行就出现了如题的报错信息!
FMINCON only accepts inputs of data type double.
错误指示是这一行:
[x,fval,exitflag,output] = fmincon(@myobjfun,x0,A,b,@data_preprocess(a1,kmax),beq,lb,ub);
回复
分享到:

使用道具 举报

发表于 2011-7-20 22:50 | 显示全部楼层
回复 1 # 花千树 的帖子

看下这帖, LZ或许会瞭解为何仅有看, 没人回的原因!
提问的智慧!!!!(发帖前请认真阅读) http://forum.vibunion.com/thread-21991-1-1.html

1.别人怎复製LZ的状况!?
2.即然知道那一行错误, 又知道是data type的问题, 就用whos或workspace看看那个不是!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-11 06:26 , Processed in 0.067230 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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