PMV計算式のアルゴリズム書き換えが分かりません!
Q&A
Closed
PMV計算式の書き換えを模索しているのですが、うまくいきません!
PMVという指数は6つの要素から求めることができます。今回、PMVの計算式を利用しPMVの値を先に0と設定し、6つの要素の1つ着衣量の値を導き出そうとしています。
ですが、数式の書き換え部分で手が止まってしまい、手も足も出ない状況です。
ですので、アルゴリズムや、数学が得意な方に助けていただきたいです。
PMVとは
PMVは、温熱環境の快適性に影響を与える6つの要素の全てを考慮した、温熱環境の快適性の評価指標です。
ちなみに、温熱環境の快適性に影響を及ぼす6つの要素とは下書きのものです
- 気温
- 湿度
- 放射温度
- 気流
- 着衣量
- 代謝量
PMVに関する参考サイトは下書きのものです。
今回やりたいこと
PMV指数計算式は下書きのサイトを参考にさせていただきました。
下書きのコードをpmv
の値を0に設定し、lcl
の値を求めるアルゴリズムにしたいです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Document</title>
<meta name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 11.0.0.0 for Windows">
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Style-Type" content="text/css"><title>PMV calculation</title></head><body>
<h1>PMV and PPD Calculation</h1>
<hr>
<form name="js">
代謝量 Metabolic rate: <input name="txtm" value="58.2" type="text"> [W/m2]<br>
外部仕事 External work: <input name="txtw" value="0.0" type="text"> [W/m2]<br>
気温 Air temperature: <input name="txtta" value="20.0" type="text"> [degree Celsius]<br>
放射温度 Radiant temperature: <input name="txttr" value="20.0" type="text"> [degree Celsius]<br>
相対湿度 Relative humidity: <input name="txtrh" value="50.0" type="text"> [%]<br>
衣服の熱抵抗 Clothing: <input name="txtcl" value="1.0" type="text"> [clo]<br>
気流速 Air velocity: <input name="txtva" value="0.2" type="text"> [m/s]<br>
<input value="Calc." onclick="pmvcalc()" type="button"><br>
</form>
function pmvcalc()
{
try
{
//テキストボックスの数値を変数に格納する
var m = eval(document.js.txtm.value);
var w = eval(document.js.txtw.value);
var ta = eval(document.js.txtta.value);
var tr = eval(document.js.txttr.value);
var rh = eval(document.js.txtrh.value);
var lcl = eval(document.js.txtcl.value);
var va = eval(document.js.txtva.value);
eps = 0.00001;
mw = m - w;
//アントワーヌの式による蒸気圧計算
ppk = 673.4 - 1.8 * ta;
ppa = 3.2437814 + 0.00326014 * ppk + 2.00658 * 0.000000001 * ppk * ppk * ppk;
ppb = (1165.09 - ppk) * (1 + 0.00121547 * ppk);
pa = rh / 100 * 22105.8416 / Math.exp(2.302585 * ppk * ppa / ppb) * 1000.0;
//fcl=着衣表面積/裸体表面積の比の計算
if (lcl > 0.5) {
fcl = 1.05 + 0.1 * lcl;
} else {
fcl = 1.0 + 0.2 * lcl;
}
//衣服表面温度tclの初期値
tcl = ta;
tcla = tcl + 1.0;
//着衣表面温度の算出
while (Math.abs(tcla - tcl) > eps) {
tcla = 0.8 * tcla + 0.2 * tcl;
hc = 12.1 * Math.sqrt(va);
if (2.38 * Math.sqrt(Math.sqrt(Math.abs(tcl - ta))) > hc) {
hc = 2.38 * Math.sqrt(Math.sqrt(Math.abs(tcl - ta)));
}
tcl = 35.7 - 0.028 * mw - 0.155 * lcl * (3.96 * 0.00000001 * fcl * (Math.pow((tcla + 273.15), 4) - Math.pow((tr + 273.15), 4)) + fcl * hc * (tcla - ta));
}
//PMVの計算
pm1 = 3.96 * 0.00000001 * fcl * (Math.pow((tcl + 273.15),4) - Math.pow((tr + 273.15),4));
pm2 = fcl * hc * (tcl - ta);
pm3 = 0.303 * Math.exp(-0.036 * m) + 0.028;
if (mw > 58.15) {
pm4 = 0.42 * (mw - 58.15);
} else {
pm4 = 0;
}
pmv = pm3 * (mw - 3.05 * 0.001 * (5733.0 - 6.99 * mw - pa) - pm4 - 1.7 * 0.00001 * m * (5867.0 - pa) - 0.0014 * m * (34.0 - ta) - pm1 - pm2);
ppd = 100.0 - 95.0 * Math.exp(-0.0335 * Math.pow(pmv,4) - 0.2179 * pmv * pmv);
//小数点以下2桁に直す
pmv = pmv * 100;
pmv = Math.round(pmv);
pmv = pmv / 100;
ppd = ppd * 100;
ppd = Math.round(ppd);
ppd = ppd / 100;
//結果表示
alert("PMV: "+pmv+" PPD: "+ppd + " [%]");
}
catch(e)
{
alert("数値を入れてください");
}
}
お願い
コード内にあるfunction pmvcalc()
のpmv
の値を0と設定し、lcl
の値を求めるようなアルゴリズムを考えていただきたいです。最悪、lcl
のような着衣に関する指数が取れれば、上のコードの原型がなくてもよいです。
自分は下書きの部分で詰まってしまい、打開策が全く思いつきません。
//fcl=着衣表面積/裸体表面積の比の計算
if (lcl > 0.5) {
fcl = 1.05 + 0.1 * lcl;
} else {
fcl = 1.0 + 0.2 * lcl;
}
アルゴリズムや、数学が得意な方、無理難題だとは思いますが、解決していただけると大変助かります。
返信お待ちしています、ご回答のほどよろしくお願いいたします。