prosail模型敏感性分析

敏感性分析一般借助simlab软件,具体敏感性分析的方法可以参考https://www.jianshu.com/p/2656af9f8d81
首先通过simlab软件进行样本采样,生成.SAM文件(我定义了7个参数),
prosail模型敏感性分析_第1张图片然后读取文件中的参数值,代入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)

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

你可能感兴趣的:(prosail模型敏感性分析)