Path: news.mathworks.com!not-for-mail
From: "Nemal " <nemalbeckham_7@hotmail.com>
Newsgroups: comp.soft-sys.matlab
Subject: Problem with function
Date: Tue, 3 Nov 2009 18:59:03 +0000 (UTC)
Organization: Univ of Minnesota
Lines: 107
Message-ID: <hcpuhn$loe$1@fred.mathworks.com>
Reply-To: "Nemal " <nemalbeckham_7@hotmail.com>
NNTP-Posting-Host: webapp-05-blr.mathworks.com
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit
X-Trace: fred.mathworks.com 1257274743 22286 172.30.248.35 (3 Nov 2009 18:59:03 GMT)
X-Complaints-To: news@mathworks.com
NNTP-Posting-Date: Tue, 3 Nov 2009 18:59:03 +0000 (UTC)
X-Newsreader: MATLAB Central Newsreader 1697181
Xref: news.mathworks.com comp.soft-sys.matlab:582133


Hi there, 
I am writing a small script to generate some values regarding my homework. All the values in these function should be a integer. Somehow, the y function ends up giving a matrices as an answer. But when i manually type out the values and calculate, it turns out to be an integer. I am lost as I dont know where am i going wrong? Please help me out

**********************************************************
%Universal Variable 
GP = 398600; 

r1_v = [5644 -2830 -4170]; %in km
r2_v = [-2240 7320 -4980];

delta_t = 20/60; %in hrs

r1 = norm(r1_v);
r2 = norm(r2_v);

% assuming prograde trajectory

check = cross(r1_v, r2_v);

%to determine the delta theta
if check(3) > 0
    delta_theta = acosd((dot(r1_v, r2_v))/(r1*r2));
else
    delta_theta = 360 - acosd((dot(r1_v, r2_v))/(r1*r2));
end

A = sind(delta_theta) * sqrt((r1*r2)/(1-cosd(delta_theta)));

% to determine where F(z) becomes zero starting from -100
z=0.1
% to calculate the exact z
ratio = 1;
while abs(ratio) >1e-8
    ratio=F(z, delta_t)/DF(z) 
    z = z- ratio;
end

%calculation of lagrange coefficients
f = 1 - y(z)/r1;
g = A * sqrt(y(z)/GP);
gdot = 1 - y(z)/r2;

% calculation of velocity
v1_v = 1/g*(r2_v-f*r1_v)
v2_v = 1/g*(gdot*r2_v-r1_v)

*******************************************************
%Subfunctions

function calcF_zt= F(z, delta_t)
    global GP A
    calcF_zt = ((y(z)/C(z))^1.5)*S(z) + A*sqrt(y(z))-sqrt(GP)*delta_t;
return

function y=y(z)
    global r1 r2 A
    y=r1+r2+A*((z*S(z))-1)/sqrt(C(z));
return

function stumpS = S(z)
    if z > 0
        stumpS = (sqrt(z)-sin(sqrt(z)))/(sqrt(z))^3;
    elseif z<0
        stumpS = (sinh(sqrt(-z)) -sqrt(-z))/(sqrt(-z))^3;
    else
        s = 1/6;
    end
return

function stumpC = C(z)
    if z > 0
        stumpC = (1-cos(sqrt(z)))/z;
    elseif z<0
        stumpC = (cosh(sqrt(-z))-1)/(-z);
    else
        stumpC = 1/2;
    end
return

function Df = DF(z)
    global A
    if z == 0
        Df = sqrt(2)/40 * y(0)^1.5 + A/8*(sqrt(y(0))+A*sqrt(1/2/y(0)));
    else
        Df = (y(z)/C(z))^1.5*((1/(2*z))*(C(z)-1.5*(S(z)/C(z))) + 0.75 * (((S(z))^2)/(C(z)))) + (A/8)*(3*(S(z)/C(z))*sqrt(y(z))+A*sqrt(C(z)/y(z)));
    end
return

********************************************
i have a feeling there is something wrong at my y function

>> y(2)

ans =

     []

r1+r2+A*((z*S(z))-1)/sqrt(C(z))

ans =

  8.6168e+003

can someone help me out??

Thanks
Nemal