"ghasem " <email@example.com> wrote in message news:firstname.lastname@example.org... >> Yes. Instead of trying to solve for a root of f(z) = besselj(1, z) [for >> example] solve for solutions of f([x; y]) = [real(besselj(1, x+1i*y)); >> imag(besselj(1, x+1i*y))] >> >> function output = mysystem(inputs) >> % The inputs are all purely real >> realPartOfInput = inputs(1); >> imagPartOfInput = inputs(2); >> >> % Build a complex number from the inputs >> z = complex(realPartOfInput, imagPartOfInput); >> >> % Now you can work with the complex value z internally >> complexOutput = besselj(1, z); >> >> % In order to return a value to FSOLVE, the outputs must be purely real >> % Break the output into its parts >> output = [real(complexOutput); imag(complexOutput)]; >> >> Instead of having a system of one equation in one unknown you have a >> system of two equations (the real and imaginary parts of the BESSEL >> function) in two unknowns (the real and imaginary parts of z.) >> >> -- >> Steve Lord >> email@example.com >> To contact Technical Support use the Contact Us link on >> http://www.mathworks.com > ==================================== > Hi steve Lord. > thank you for your attention.I know that.But when complex unknowns are > within argument of bessel function,do you think by using of real and imag > commands,we have a real and imag expression,really?
> for example,suppose we have: > syms a b % a,b are unknown
IF you want to operate symbolically you want to declare these as real. Otherwise Symbolic Math Toolbox will assume that they could be complex, and so:
> c = a+1j*b;
real(c) will be real(a)-imag(b).
If instead you told Symbolic Math Toolbox that a and b were real:
syms a b real % Use SYM instead inside a function c = a+1j*b; real(c) % returns a since b cannot contribute
But if you're trying to solve this symbolically, you should NOT be using FSOLVE or FZERO. Those are for finding NUMERIC solutions to equations. The SOLVE function solves equations SYMBOLICALLY. Don't mix the two. In this case, trying to solve the system symbolically will probably take an extremely long time and generate an incredibly large and complicated expression (if it can be solved symbolically at all.) I recommend solving the system numerically using the technique I described above.
> d = besseli(1,c); > % now write real(d),we have: > real(d) = > conj(besseli(1, a + b*i))/2 + besseli(1, a + b*i)/2 > % now my question is: > do you think that "conj(besseli(1, a + b*i))/2 + besseli(1, a + b*i)/2" is > a purely real expression? > I think that is not. > So,we can not use from real and imag command to obtain purely real and > imaginary expression,when we have complex argument in bessel functions... > when use from real and imag commands in this case,again our equation is > complex! > are you agree with me?
See above about FSOLVE versus SOLVE. Either keep all your calculations symbolic or keep all your calculations numeric. Mixing the two requires additional care.