Hello, everyone.
First, I would like to state that I am something of a coding idiot. If we were in person, I would ask you to speak slowly and loudly, but this is the internet, so I instead ask your patience if my question is seemingly obvious.
I'm also probably posting what is an annoying amount of code, but I have no clue where the problem lies, so I want to provide as much information as possible.
Here is the code I am trying to run. I have put '###' around the two troublesome lines:
meanvr = [.56552 0.195165 2.835 .5500]; vrhi = [.861332 0.250000 3.000 .41844]; vrlo = [.405612 0.175165 2.755 .37063]; syms AS JS Fe Pf Svr = [AS JS Fe Pf]; mx = [0, JS*Fe*Pf; JS, AS]; reps=500;rand('state',sum(100*clock));numvrs = length(meanvr);allvrs = rand(reps,numvrs); allvrs = allvrs.*repmat(vrhi-vrlo,reps,1) + repmat(vrlo,reps,1);for rr = 1:reps disp(rr); realmx=subs(mx,Svr,allvrs(rr,:)); [lambdas,lambda1,W,w,V,v]=eigenall(realmx); sensmx=v*w'/(v'*w); elastmx=(sensmx.*realmx)/lambda1; alllams(rr,1)=lambda1; for xx=1:numvrs diffofvr=subs(diff(mx,Svr(xx)),Svr,allvrs(rr,:)); vrsens(xx)=sum(sum(sensmx.*diffofvr)); end; allelasts(rr,:)=((vrsens.*allvrs(rr,:))/lambda1);end;realmx=subs(mx,Svr,meanvr);[lambdas,lambda1,W,w,V,v]=eigenall(realmx);meanlam1=lambda1; sensmx=v*w'/(v'*w);elastmx=(sensmx.*realmx)/lambda1;meansens = zeros(1,numvrs);for xx = 1: numvrs diffofvr=subs(diff(mx,Svr(xx)),Svr,meanvr); meansens(xx) = sum(sum(sensmx.*diffofvr));end;meanelast=((meansens.*meanvr)/lambda1);maxlams=zeros(1,numvrs);for rate = 1:numvrs vrates=meanvr; vrates(rate)=vrhi(rate); realmx=subs(mx,Svr,vrates); [lambdas,lambda1,W,w,V,v]=eigenall(realmx); maxlams(rate)=lambda1;end;disp('Below are the maximum lambdas and max proportional')disp('change in lambdas from changing each vital rate')disp(Svr); disp(maxlams)###disp((maxlams-ones(1,numvrs)*meanlam1)/meanlam1)###disp('Below are the x^2 values for lambda and each')disp('vital rate, a measure of influence on population')disp('growth for the random simulated matrices')correls=corrcoef(double([allvrs, alllams]));disp(Svr); disp((correls(numvrs+1,1:numvrs)).^2);disp('Below are the elasticities for the mean vital rates,')disp('and then the min, max, mean, and st. deviation of the')disp('elasticity values from the random matrices')###disp(Svr); disp(meanelast);###disp(min(double(allelasts))); disp(max(double(allelasts)));disp(mean(double(allelasts))); disp(std(double(allelasts)));
However, when I run the code, I get very odd numbers as results for those two troublesome lines. For example, the first row of numbers is what I would expect, but the second is… well:
Below are the maximum lambdas and max proportionalchange in lambdas from changing each vital rate[ AS, JS, Fe, Pf] 0.9255 0.7040 0.6606 0.6365[ -(113049347475759065049474359227755610434514^(1/2)/900719925474099200000 - 9045809355840329847/14073748835532800000)/(113049347475759065049474359227755610434514^(1/2)/900719925474099200000 + 7069/25000), -(113049347475759065049474359227755610434514^(1/2)/900719925474099200000 - 92622050966827273/219902325555200000)/(113049347475759065049474359227755610434514^(1/2)/900719925474099200000 + 7069/25000), -(113049347475759065049474359227755610434514^(1/2)/900719925474099200000 - 5318325929310998597/14073748835532800000)/(113049347475759065049474359227755610434514^(1/2)/900719925474099200000 + 7069/25000), -(113049347475759065049474359227755610434514^(1/2)/900719925474099200000 - 4978563237831842347/14073748835532800000)/(113049347475759065049474359227755610434514^(1/2)/900719925474099200000 + 7069/25000)]
Any help anyone is willing to give is much appreciated.
Best Answer