0

これにode23を使用する方法を見つけようとしています。私は機能を持っています:

function res = HardyWeinberg(inAFrequency, inFitness_AA, inFitness_Aa, inFitness_aa)
    fA = inAFrequency;
    wAA = inFitness_AA;
    wAa = inFitness_Aa;
    waa = inFitness_aa;
    res = (fA*(1-fA)*(fA*(wAa - wAA) + (1-fA)*(waa - wAa)))/(fA*fA*wAA + 2*fA*(1-fA)*wAa     + (1-fA)*(1-fA)*waa);
end

[0 10] の連続スパンで実行したい。私が見たすべての例には、関数に変更を組み込むためのパラメーターが含まれています。私の場合、次の計算の inAFrequency は前の計算の結果です。多分私はここで何かが欠けています(数学的にまたはMatlabの賢明な)。

上記の関数は、次の 2 つの「世代」の違いを示します。

スパン全体でode23を計算する方法についてアドバイスしてください。

みんなありがとう。

4

1 に答える 1

0

わかりました、解決しました。

ちょっとした背景: ハーディ・ワインバーグの原理基本的に遺伝特性の頻度変化を計算する方法です。たとえば、目の色を定義する遺伝子には、複数の対立遺伝子 (茶色の対立遺伝子、青、緑) があります。私たちの目の色の遺伝子は、男性の親と女性の親から与えられた 2 つの対立遺伝子から構築され、両方が目の色を決定します。適応度は、私たちの生殖と子孫の「成功」の尺度であり、遺伝学の影響を受けます。Hardy-Weinberg の原理は、集団内の対立遺伝子の初期頻度と、他の対立遺伝子との遺伝的寄与の適合性に基づいて、この対立遺伝子の経時的な頻度を計算するのに役立ちます。良好で貢献している対立遺伝子は、特定の生き物がより多く繁殖するのに役立つ可能性があるため、その対立遺伝子が集団に固定されるまで、統計的にますます広がります(または 悪いか、貢献していない場合は消える可能性があります)。いずれかの方法...

特定の対立遺伝子が与えられると、パラメーター「wAA」、「wAa」、および「waa」は定数と見なされ、変化しません。(彼らはフィットネスを定義します-生物学的/進化的用語)。

したがって、入力は、適合度が計算される世代のスパンにすぎません。

Hardy-Weinberg 関数は次のとおりです。

function res = HardyWeinberg(t, x)
    fA = x; %# Frequency
    wAA = 1; wAa = 1.01; waa = 1.01; %# Fitness values
    res = (fA*(1-fA)*(fA*(wAa - wAA) + (1-fA)*(waa - wAa)))/(fA*fA*wAA + 2*fA*(1-fA)*wAa + (1-fA)*(1-fA)*waa);
end

0.5 の初期対立遺伝子頻度で世代のスパンにわたって ode23 を計算します。

[tv f1] = ode23(@HardyWeinberg,[1 analytical.Generations],[analytical.A_Frequency]);
plot(tv,f1,tv,1-f1);
xlabel('Generation');
ylabel('Frequency') 

これが役に立ったことを願っています:)

于 2013-03-10T03:22:37.430 に答える