爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9557|回复: 11

[程序设计] matlab调用fzero函数时参数传递问题

[复制链接]
发表于 2015-9-22 10:11:40 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
主程序如下:

for i=1:n_length_filename_a1c1
    file_a1c1=strcat('G:\0907\80cm-a1andc1\',stid_filename_a1c1(i,:),'.txt');
    [stid_year,a1,c1]=textread(file_a1c1,'%f%f%f');
%%%%%由上一行读取a1和c1的值,应用在调用的函数中
    for j=1,21
        file_dT_year=strcat('G:\0907\80cm-tibet-6\',stid_filename_dT(((i-1)*21+j),:),'.txt');
        [stid_station,year_dT,month_dT,dT]=textread(file_dT_year,'%f%f%f%f');
        for m=1,12
            b1=w*month_dT(m);
            dT_staion_year_month=dT(m);
%%%%%上一行中的dT_staion_year_month也要应用在调用函数中
            B1=1;
            KK(m)=fzero('funx',B1);
%%%%%共有34个文件*21年*12个月,因此kk是一个与m(月)有关的变量
            if (year_dT(m)/4==0)
               month_day(2)=29;
            else
               month_day(2)=28;
            end
            if (m==4|m==6|m==9|m==11)
                month_day(m)=30
            else
                month_day(m)=31
            end
            K(m)=2*w/KK(m)^2/(month_day(m)*(3600*24));



调用函数如下:
function fx=funx(x,a1,b1,c1,dT_staion_year_month);
dz=2.4;
w=2*(pi)/12;
fx=a1*exp(-x*dz)*sin(b1+c1-x*dz)-dT_staion_year_month;
end


提示错误:
错误使用 fzero (line 289)
FZERO 无法继续,因为用户提供的 function_handle ==> funx 失败,出现下面的错误。

输入参数的数目不足。

出错 Untitled1 (line 21)
            KK(m)=fzero('funx',B1);



希望能每次调用函数时,都能从主程序中读取不同的a1,b1,c1,dT_staion_year_month参数的值。
因为刚开始接触matlab,对函数调用还不熟悉,麻烦各位帮忙看看应该要想得到这样的结果应该怎么写程序啊?谢谢!
密码修改失败请联系微信:mofangbao
发表于 2015-9-22 12:45:45 | 显示全部楼层
我第一次见到for循环是这么用的,不知道需不需要改
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-9-22 14:35:16 | 显示全部楼层
天坑一地坑 发表于 2015-9-22 12:45
我第一次见到for循环是这么用的,不知道需不需要改

噢。。谢谢你帮我看程序。我运行的时候没有提示for循环有错误呢
密码修改失败请联系微信:mofangbao
发表于 2015-9-22 19:24:42 | 显示全部楼层
你把那个逗号改成冒号看看
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-9-22 21:18:52 | 显示全部楼层
天坑一地坑 发表于 2015-9-22 19:24
你把那个逗号改成冒号看看

嗯谢谢提醒,已经改了,之前一直写fortran程序写惯了。。。

改了之后还是那个错误呢,唉

>> Untitled1
错误使用 fzero (line 289)
FZERO 无法继续,因为用户提供的 function_handle ==> funx 失败,出现下面的错误。

输入参数的数目不足。

出错 Untitled1 (line 21)
            KK(m)=fzero('funx',B1);
密码修改失败请联系微信:mofangbao
发表于 2015-9-23 10:26:49 | 显示全部楼层
对fzero这个函数不熟悉,但是看了程序的流程,你虽然在循环中提取了各参数变量值,但是并没有在调用fzero函数时体现参数传递,也就是说你提取的值就没用到,个人建议经供参考
密码修改失败请联系微信:mofangbao
发表于 2015-9-23 10:36:43 | 显示全部楼层
KK(m)=fzero(@(x) funx(x,a1,b1,c1,dT_staion_year_month),B1);你试试这个
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-9-23 11:15:59 | 显示全部楼层
rs06 发表于 2015-9-23 10:36
KK(m)=fzero(@(x) funx(x,a1,b1,c1,dT_staion_year_month),B1);你试试这个

你好,谢谢你的建议。

改了之后错误如下:

>> Untitled1
错误使用 fzero (line 118)
输入应为包含有效字段的结构体或至少包含 FZERO 的两个参数。

出错 Untitled1 (line 19)
            KK(m)=fzero(@(x) funx(x,a1(j),b1,c1(j),dT(m),B1));
密码修改失败请联系微信:mofangbao
发表于 2015-9-23 11:20:15 | 显示全部楼层
KK(m)=fzero(@(x) funx(x,a1(j),b1,c1(j),dT(m)),B1);
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-9-23 11:28:34 | 显示全部楼层
rs06 发表于 2015-9-23 11:20
KK(m)=fzero(@(x) funx(x,a1(j),b1,c1(j),dT(m)),B1);

什么意思?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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