Python: создание графика модуля, который содержит механизм обратной связи

Я довольно новичок в программировании, и я пытаюсь создать простую нулевую модель энергетического баланса в Python 2.7 IDLE, чтобы рассчитать поверхностные температуры Земли и добавить обратную связь с ледяным альбедо, т. Е. Если выход температуры модели выше, чем 280 Кб, альбедо остается равным 0,3 (отраженное 30% энергии), если его менее 250 тыс. альбедо составляет 0,7 (70% энергии отражается, так как его охладитель, поэтому на Земле больше покрывается льдом (белый)), и если температура лежит в диапазоне между ними; альбедо вычисляется по формуле. Это новое значение для альбедо затем возвращается из модели для получения более точной температуры.

В моем модуле я определил;

Окончательный расчет климатической модели для альбедо Новая модифицированная климатическая модель с новым альбедо (-ыми), принятым в целях

Я пытаюсь создать график для сравнения результатов первой климатической модели с изменяющимся входом на солнечную энергию, но с последовательным альбедо, с выходом второго пробега с изменяющимся альбедо и солнечным выходом. Но продолжайте получать ошибки;

Это мой сценарий для моего графика:

import matplotlib.pyplot as plt import numpy as np from EBM_IceAlbFeedback import * # q is for the Solar Constant q=np.linspace(2.5e26,4.0e26,150) # t= temperature derived from the final climate model t= finalCM(Q=q) plt.plot(q,t,'b-') q=np.linspace(3.0e26,4.5e26,150) # tb= is the second set of temperatures derived from the NEWfinalCM which contains an Ice Albedo Feedback tb= NEWfinalCM(Q=q) plt.plot(q,tb,'r-') plt.show () 

Мое сообщение об ошибке:

 Traceback (most recent call last): File "K:/python/CompareCMsPlt2.py", line 13, in <module> tb= NEWfinalCM(Q=q) File "K:/python\EBM_IceAlbFeedback.py", line 228, in NEWfinalCM NewAlb=NAlb(dist=dist, Q=Q, co2Emissions=co2Emissions, alpha=alpha, cCycleInt=cCycleInt, cCycleSlope=cCycleSlope) File "K:/python\EBM_IceAlbFeedback.py", line 190, in NAlb if ta>280.0: ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

Я считаю, что это относится к чему-то в этой части моего модуля:

 def NAlb (dist=150e9, Alb=0.3, Q=3.87e26, co2Emissions=0.0, alpha=3.0, cCycleInt=0.4, cCycleSlope=0.0001): ''' Readjusting Albedo to the output temperature Arguments: Q = solar ouput (W) dist = distance from the sun (m) co2Emissions = Cumulative CO2 emissions since 2010 (GtC) alpha = climate sensitivity (K/2xCO2) cCycleInt = Initial value of the airborne fraction (unitless) cCycleSlope = Increment the airborne fraction per GtC (GtC^-1) Return Value: NewAlb= New Albedo (Unitless) ''' # CALCULATE ABORTIVITY: #Our model is baselined at an atmospheric CO2 concentration of 390 ppmv in 2010 baselineCO2=390.0 #The official IPCC figure for conversion of mass of emissions (GtC) top atmospheric concentration (ppmv) IPCCmassToConc=2.12 #approximate correction for the carbon cycle: cCycleAdjust=cCycleInt+cCycleSlope*co2Emissions #convert GtC to CO2 conc in ppmv: co2=co2Emissions*cCycleAdjust/IPCCmassToConc+baselineCO2 #calculate absorptivity absrp=absrpFromCO2( CO2=co2, alpha=alpha ) #CALCULATE TEMPERATURE: using the same method as in the finalCM ta=transATmCM (absrpt=absrp, dist=dist, Alb=0.3, Q=Q) # define the thresholds for an ice free state. if ta>280.0: NewAlb=0.3 # define the threshold for a snow ball Earth state. elif ta<250.0: NewAlb=0.7# Calculate albedo for temperatures between 280k to 230k elif 250.0<ta<280.0: NewAlb=(0.3+(((0.7-0.3)/(280.0-250.0))*(280.0-ta))) return NewAlb def NEWfinalCM( co2Emissions=0.0, alpha=3., dist=150e9, Q=3.87e26, cCycleInt=0.4, cCycleSlope=0.0001 ): ''' A New final Climate model which contains and Ice Albedo Feedback Arguments: Q = solar ouput (W) dist = distance from the sun (m) co2Emissions = Cumulative CO2 emissions since 2010 (GtC) alpha = climate sensitivity (K/2xCO2) cCycleInt = Initial value of the airborne fraction (unitless) cCycleSlope = Increment the airborne fraction per GtC (GtC^-1) Return Value: tn = surface temperature (K) ''' #Our model is baselined at an atmospheric CO2 concentration of 390 ppmv in 2010 baselineCO2=390.0 #The official IPCC figure for conversion of mass of emissions (GtC) top atmospheric concentration (ppmv) IPCCmassToConc=2.12 #approximate correction for the carbon cycle: cCycleAdjust=cCycleInt+cCycleSlope*co2Emissions #convert GtC to CO2 conc in ppmv: co2=co2Emissions*cCycleAdjust/IPCCmassToConc+baselineCO2 #calculate temperature absrp=absrpFromCO2(CO2=co2, alpha=alpha) NewAlb=NAlb(dist=dist, Q=Q, co2Emissions=co2Emissions, alpha=alpha, cCycleInt=cCycleInt, cCycleSlope=cCycleSlope) tn=transATmCM( absrpt=absrp, dist=dist, Alb=NewAlb, Q=Q) return tn / (280.0-250.0)) * (280,0- def NAlb (dist=150e9, Alb=0.3, Q=3.87e26, co2Emissions=0.0, alpha=3.0, cCycleInt=0.4, cCycleSlope=0.0001): ''' Readjusting Albedo to the output temperature Arguments: Q = solar ouput (W) dist = distance from the sun (m) co2Emissions = Cumulative CO2 emissions since 2010 (GtC) alpha = climate sensitivity (K/2xCO2) cCycleInt = Initial value of the airborne fraction (unitless) cCycleSlope = Increment the airborne fraction per GtC (GtC^-1) Return Value: NewAlb= New Albedo (Unitless) ''' # CALCULATE ABORTIVITY: #Our model is baselined at an atmospheric CO2 concentration of 390 ppmv in 2010 baselineCO2=390.0 #The official IPCC figure for conversion of mass of emissions (GtC) top atmospheric concentration (ppmv) IPCCmassToConc=2.12 #approximate correction for the carbon cycle: cCycleAdjust=cCycleInt+cCycleSlope*co2Emissions #convert GtC to CO2 conc in ppmv: co2=co2Emissions*cCycleAdjust/IPCCmassToConc+baselineCO2 #calculate absorptivity absrp=absrpFromCO2( CO2=co2, alpha=alpha ) #CALCULATE TEMPERATURE: using the same method as in the finalCM ta=transATmCM (absrpt=absrp, dist=dist, Alb=0.3, Q=Q) # define the thresholds for an ice free state. if ta>280.0: NewAlb=0.3 # define the threshold for a snow ball Earth state. elif ta<250.0: NewAlb=0.7# Calculate albedo for temperatures between 280k to 230k elif 250.0<ta<280.0: NewAlb=(0.3+(((0.7-0.3)/(280.0-250.0))*(280.0-ta))) return NewAlb def NEWfinalCM( co2Emissions=0.0, alpha=3., dist=150e9, Q=3.87e26, cCycleInt=0.4, cCycleSlope=0.0001 ): ''' A New final Climate model which contains and Ice Albedo Feedback Arguments: Q = solar ouput (W) dist = distance from the sun (m) co2Emissions = Cumulative CO2 emissions since 2010 (GtC) alpha = climate sensitivity (K/2xCO2) cCycleInt = Initial value of the airborne fraction (unitless) cCycleSlope = Increment the airborne fraction per GtC (GtC^-1) Return Value: tn = surface temperature (K) ''' #Our model is baselined at an atmospheric CO2 concentration of 390 ppmv in 2010 baselineCO2=390.0 #The official IPCC figure for conversion of mass of emissions (GtC) top atmospheric concentration (ppmv) IPCCmassToConc=2.12 #approximate correction for the carbon cycle: cCycleAdjust=cCycleInt+cCycleSlope*co2Emissions #convert GtC to CO2 conc in ppmv: co2=co2Emissions*cCycleAdjust/IPCCmassToConc+baselineCO2 #calculate temperature absrp=absrpFromCO2(CO2=co2, alpha=alpha) NewAlb=NAlb(dist=dist, Q=Q, co2Emissions=co2Emissions, alpha=alpha, cCycleInt=cCycleInt, cCycleSlope=cCycleSlope) tn=transATmCM( absrpt=absrp, dist=dist, Alb=NewAlb, Q=Q) return tn 

Любая помощь приветствуется

благодаря

Вышеприведенный комментарий верен, и неясно, что вы хотите сделать, но если вы хотите проверить, проверяют ли все элементы в вашем массиве условие, то вы могли бы сделать:

 if tb.all() > 280.0: 

Если вас интересует, существует ли значение в массиве, который его заполняет, вы можете сделать:

 if tb.max() > 280.0: ... elif tb.min() < 250.0: 

Оба вышеприведенных примера не должны быть более чем простой инструкцией else для третьего условия.

Если вы хотите оценивать позиции индивидуально, вы могли бы также, но тогда я бы пошел на следующее:

 tb_test = np.ones(tb.shape) * 3 tb_test[np.where(tb > 280)] = 1 tb_test[np.where(tb < 250)] = 2 

Это сделает массив tb_test для тех, где применяется первое условие, двойки для второго и тройки для третьего.

Конечно, вы можете вставлять свои вычисления непосредственно, а не выше, где указаны различные условия …