prosail模型敏感性分析

敏感性分析一般借助simlab软件,具体敏感性分析的方法可以参考https://www.jianshu.com/p/2656af9f8d81
首先通过simlab软件进行样本采样,生成.SAM文件(我定义了7个参数),
在这里插入图片描述然后读取文件中的参数值,代入PROSAIL模型
不了解PROSAIL的可以参考https://blog.csdn.net/weixin_45452300/article/details/105300067
得到的结果生成是simlab可以读取的模型结果文件。

import os
import prosail
para_dir = r'C:\Users\Administrator\Desktop\在家写的小程序'
data_dir = r'C:\Users\Administrator\Desktop\在家写的小程序'

with open(os.path.join(para_dir,'prosailoutput3.txt'),'a') as fp2:# 打开创建输出结果文件
    fp2.writelines(['1','\n','spectrum','\n','time = yes','\n'])
    with open(os.path.join(para_dir,'prosailminganx3.sam'),'r') as fp:
        fp.readline() # 第一行
        number = fp.readline() #第二行为生成参数个数
        fp.readline() #变量个数
        fp.readline() #0  此后开始读参数
        fp2.write(str(number))
        for i in range(int(number)):#提取参数
            sim_paraments = list(map(float,fp.readline().split('\t')[:-1]))
            rr = prosail.run_prosail(sim_paraments[0], sim_paraments[1], sim_paraments[2], sim_paraments[3], sim_paraments[4], sim_paraments[5], sim_paraments[6], -0.35, 0.01,
                        30., 10., 0., typelidf=2, 
                        rsoil = 1., psoil=1., factor="SDR")
            fp2.writelines(['RUN',' ',str(i),'\n'])
            fp2.write('2101')
            fp2.write('\n')
            for j in range(2101):
                fp2.writelines([str(j+400),' ',str(rr[j]),'\n'])
            if i%50==0:
                print(i)

得到结果
在这里插入图片描述
经过simlab分析后得到敏感性结果,做成图如下
这里有个问题尚未解决,采样一阶敏感性指数作图时发现采样次数小的话,参数的一阶敏感性指数之和会大于一,3000次左右采样后就不大于一了。
采样2000次
在这里插入图片描述
采样3500次
在这里插入图片描述

评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值