Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2009, 20:39   #1
chip115
Новичок
Джуниор
 
Регистрация: 27.11.2009
Сообщений: 1
По умолчанию как решить уравнение когда ln(-x) ?

Всем привет. Проблема с решением уравнения. Не могу понять что не так...
Постановка задачи:
Разработать программу для расчета резестивной электрической цепи с нелинейным элементом.
Дано :
R1=100 Ом
a= 32 В ^-1 (это альфа)))
I обр. =5 * 10^-6 A
U=Um*sin(wt)
где Um напряжение на входе в цепи соответствующее току Iд=6А
Получить график зависимости Iд=f(wt) при изменении Wt от 0 до 2пи.

при заданых параметрах диода и резистора ток диода Iд для каждого значения приложенного напряжения U определяется путем решения уравнения относительно iд. При этом поиск производится в интервале
0<Iд<U/R1 при U>0 и -I обр < Iд < 0 при U<0

Уравнение следующего вида:

U-Iд*R1-ln((Iд / I обр)+1) / а =0

собственнно вопрос.. Как решить это уравнение када -I обр < Iд < 0 при U<0 логарифм получается отрицательный. Мож я что с пределами на путал? не туда поставил?
Вот чась кода.
Решаю методом дихотомии... .
Код:
/*-----------основное уравнение------------*/
double pUm (double Umf,double i_d)
{
        return (Umf-i_d*R1-log((i_d/i_back)+1)/alpha);
}
 
 
/*------------------вычисляем максимальное напряжение при заданном токе--------------*/
double calc_of_mvolt(double (*pUm)(double,double))
{
 
        do
        {
                x=(a+b)/2;
                if((*pUm)(a,6)*(*pUm)(x,6)>0)
                        a=x;
                else
                        b=x;
        }
        while((b-a)>eps);
        return (x);
}
/*-----------------------------------------------------------------*/
 
 
/*-------вычисление тока диода при изменении входного напряжения по синусоидальному заону-----*/
double calc_of_curent(double (*pUm)(double,double))
{
        if(U>0)
        {
                a=0;
                b=U/R1;
                do
                {
                        x=(a+b)/2;
                        if((*pUm)(U,a)*(*pUm)(U,x)>0)
                                a=x;
                        else
                                b=x;
                }
                while((b-a)>eps);
                return (x);
        }
        else if(U<0)
        {
                a=-i_back;
                b=0;
                do
                {
                        x=(a+b)/2;
                        if((*pUm)(U,a)*(*pUm)(U,x)>0)
                                a=x;
                        else
                                b=x;
                }
                while((b-a)>eps);
                return (x);
        }
 return (0);
}
chip115 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решить уравнение : используя схему горнера решить с меньшим количеством умножений! Rusl92 Помощь студентам 1 06.09.2009 23:24
помогите решить уравнение fist53 Паскаль, Turbo Pascal, PascalABC.NET 3 04.06.2009 22:47
как решить нелинейное уравнение методом простых итераций??? Bonifaciy Помощь студентам 3 13.11.2008 17:30
Как узнать когда браузер скачивает, а когда нет? iPod Работа с сетью в Delphi 1 07.05.2007 15:16