爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8901|回复: 1

请教一个matlab用迭代法解未知数的问题

[复制链接]

新浪微博达人勋

发表于 2019-11-16 16:33:02 | 显示全部楼层 |阅读模式
1金钱
各位大佬,已知水汽压,波文比和空气温度,用迭代法算湿润地表温度。方程为(x-a1)/(6.112*exp((17.67*x)/(x+243.5))-a3)-a2;x为要解的湿润地表空气温度,三个系数a1,a2,a3都为400*700*408的数据,如何得到x?目前采用的方法为:
clear;clc;
GAMA=load('F:\Download\ET_usedata_mon(1982-2015)\gamma_mon_all.mat','gamma');
ETP=load('F:\Download\ET_usedata_mon(1982-2015)\ETpa_B_mon_all.mat','ETpa_B');
TA=load('F:\Download\ET_usedata_mon(1982-2015)\TAA_mon_all.mat','TAA');
ETD=load('F:\Download\ET_usedata_mon(1982-2015)\EA_mon_all.mat','EA');
RN=load('F:\Download\ET_usedata_mon(1982-2015)\Qne_mon_all.mat','Qne');%%%%用的是水当量,而不是RN
gammaa=GAMA.gamma;      
ETpa=ETP.ETpa_B;
Ta=TA.TAA;
eTD=ETD.EA;
Rn=RN.Qne;
syms x
a1=Ta(:,:,1);   
a2=(Rn(:,:,1)-ETpa(:,:,1))./(gammaa(:,:,1).*ETpa(:,:,1));
a3=eTD(:,:,1);
tic

for i=1:400
for j=1:700
if isnan(a1(i,j))==0 & isnan(a2(i,j))==0 & isnan(a3(i,j))==0
    eq1(i,j)=(x-a1(i,j))/(6.112*exp((17.67*x)/(x+243.5))-a3(i,j))-a2(i,j);
   Tws(i,j) = double(vpasolve(eq1(i,j)));
end
end
end
toc
for循环效率低,选择了一层试算,solve解的结果也不太合理,执行一次3-4小时。请问各位是否有更快,更合理的方法?

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-11-18 08:42:42 | 显示全部楼层
谢谢各位,不用回答了,问题是solve函数不适合解非线性方程,且这么大批量的数据也不该用两层for循环
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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