Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
akaelwins
1 / 1 / 2
Регистрация: 11.04.2012
Сообщений: 17
#1

Решение нелинейного уравнения - C++

04.05.2012, 18:27. Просмотров 1628. Ответов 17
Метки нет (Все метки)

Добрый вечер, никак не могу понять как реализовать на C++ решение следующего нелинейного уравнения относительно a:

http://www.cyberforum.ru/cgi-bin/latex.cgi?a = \sum_{k=1}^{n}{b}_{k}\sqrt{{c}_{k}{a}^{2} - {d}^{2}}

bk, ck, d - константы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2012, 18:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Решение нелинейного уравнения (C++):

Решение нелинейного уравнения. - C++
Товарищи программисты! У меня к вам просьба прошу помочь мне с задачей. Мне нужно составить программу для решения нелинейного уравнения...

Решение нелинейного уравнения - C++
Помогите кто нибудь решить нелинейное уравнение , неделю пытаюсь все никак не получается если можно скиньте код с++ очень надо Спасибо ...

Решение нелинейного уравнения - C++
С помощью метода итераций необходимо найти корень функции f(x) = 1/(1+exp(x)) при нулевом приближении 2,1 Пытался подставить в эту...

Решение нелинейного уравнения - C++
1. Написать программу нахождения приближенного решения нелинейного уравнения: -методом деления отрезка пополам -методом касательных ...

Найти решение нелинейного уравнения - C++
Найдите такое число x, что x^2 + \sqrt{x} = C Вводится единственное число С; Вывод - число х с не менее 6 знаками после запятой

Решение нелинейного уравнения методом итерации - C++
Написал программу решение нелинейного уравнения методом итерации: //Метод итерации #include <iostream>//for cout and cin ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
andy_111
90 / 59 / 2
Регистрация: 03.07.2011
Сообщений: 148
04.05.2012, 19:02 #2
Это же функция, а не уравнение. Или я что-то не понимаю? Как-то так, наверное
C++
1
2
3
4
5
6
7
double f(int n, double c, double b, double d){
   double a = 0;
   for (int k = 0; k < n; k++){
      a += b * sqrt(c * pow(a,2) - pow(d,2))   
   }
   return a;
}
akaelwins
1 / 1 / 2
Регистрация: 11.04.2012
Сообщений: 17
04.05.2012, 20:51  [ТС] #3
andy_111
Почему же функция? Вроде, нелинейное уравнение относительно "a", "a" ведь ни от чего не зависит, всё остальное известно. Я думал, оно численно решается, вот и пришёл за советом.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
04.05.2012, 21:01 #4
Цитата Сообщение от andy_111 Посмотреть сообщение
Это же функция, а не уравнение. Или я что-то не понимаю?
ты что-то не понимаешь.

Добавлено через 2 минуты
Цитата Сообщение от akaelwins Посмотреть сообщение
как реализовать на C++ решение следующего нелинейного уравнения
А корни искать на каком-то отрезке или вообще?
akaelwins
1 / 1 / 2
Регистрация: 11.04.2012
Сообщений: 17
04.05.2012, 21:57  [ТС] #5
Kuzia domovenok,
Никакого отрезка, на котором они могли бы быть, не задано.
zss
Модератор
Эксперт С++
6359 / 5923 / 1920
Регистрация: 18.12.2011
Сообщений: 15,222
Завершенные тесты: 1
04.05.2012, 22:01 #6
Решать рекурентно.
у нас есть зависимость a=f(a).
Берем произвольное a, вычисляем f(a),
подставляем в a и повторяем процесс до достижения
желаемой точности.
Avazart
Эксперт С++
7148 / 5325 / 276
Регистрация: 10.12.2010
Сообщений: 23,567
Записей в блоге: 17
04.05.2012, 22:12 #7
Самое первое что приходит в голову подбирать значение а, (но для этого надо знать откуда начинать то есть хотя бы одну границу и погрешность вычислений) и проверять неравенство
Код
|a - f(a)| < e,
где e - погрешность.

Добавлено через 2 минуты
Берем произвольное a, вычисляем f(a)
zss,откуда знать в каком направлении от произвольного двигаться дальше?
Полюбому нужно знать границы (отрезок значений), иначе решение может длиться бесконечность
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
04.05.2012, 22:15 #8
Цитата Сообщение от zss Посмотреть сообщение
Решать рекурентно.
у нас есть зависимость a=f(a).
Берем произвольное a, вычисляем f(a),
подставляем в a и повторяем процесс до достижения
желаемой точности.
А разве доказано, что f(a) -это сжимающая функция?

Цитата Сообщение от Avazart Посмотреть сообщение
zss,откуда знать в каком направлении от произвольного двигаться дальше?
Он прав, есть такой метод, но это метод простых итераций, основанный на какой-то теореме о сжимающих функциях. Проблема в том, что на счёт этих функций в этом случае я не уверен.
zss
Модератор
Эксперт С++
6359 / 5923 / 1920
Регистрация: 18.12.2011
Сообщений: 15,222
Завершенные тесты: 1
04.05.2012, 22:22 #9
Методом проб и ошибок, другого варианта нет.
Если процесс будет расходиться, то пробовать другие
начальные значения.
Avazart
Эксперт С++
7148 / 5325 / 276
Регистрация: 10.12.2010
Сообщений: 23,567
Записей в блоге: 17
04.05.2012, 22:34 #10
Если процесс будет расходиться, то пробовать другие начальные значения.
только возможно придется перебрать всего ничего бесконечность значений
Нужно знать либо природу ф-ции либо границы в которых находятся корни.

Может вы про это
http://ru.wikipedia.org/wiki/Метод_Ньютона
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
04.05.2012, 22:35 #11
всё-таки попробуй методом итераций решить. Если он не будет сходиться, значит не судьба.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
float f(float x){
  float a=0.0;
  for (int k=1; k<=n; k++){a+=...}
}
 
 
x=0; x1=f(x);dx=fabs(x1-x);i=0;
while (dx>epsilon && (i<100)){
x=x1;
x1=f(x);
dx=fabs(x1-x);
i++;
}
if (i==100)cout<<"FAIL";
else cout<<x1;
thick_int
Заблокирован
04.05.2012, 23:03 #12
Думаю, что автор темы не полностью привел условие задачи.
В таком виде, рехнуться можно не только решения искать, но даже ОДЗ, и в таком общем виде никто и никогда такие уравнения не дает. Должны быть еще какие-то условия на коэффициенты. Например, положительность некоторых из них.
Тогда, немного покрутившись и применив классические неравенства типа Коши-Шварца, и использовав стандартные свойства, как то неотрицательность подкоренного выражения, вполне можно определить тот ОТРЕЗОК, на котором могут быть корни данного уравнения, и который подлежит обследованию.
Avazart
Эксперт С++
7148 / 5325 / 276
Регистрация: 10.12.2010
Сообщений: 23,567
Записей в блоге: 17
04.05.2012, 23:12 #13
О чем и я говорю.
Как я понимаю итерационный метод может только приблизить результат, но не найти его, опять таки нужны пределы
Avazart
Эксперт С++
7148 / 5325 / 276
Регистрация: 10.12.2010
Сообщений: 23,567
Записей в блоге: 17
04.05.2012, 23:19 #14
Предлагаю найти производную ф-ции, что бы попробывать методом Ньютона изадать значение n
Миниатюры
Решение нелинейного уравнения  
Avazart
Эксперт С++
7148 / 5325 / 276
Регистрация: 10.12.2010
Сообщений: 23,567
Записей в блоге: 17
04.05.2012, 23:39 #15
Вот вычислил и проверил(Matcad) значение производной
Изображения
 
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2012, 23:39
Привет! Вот еще темы с ответами:

Решение нелинейного уравнения методом секущих - C++
Окажите помощь,пожалуйста!! Помогите написать на Visual Studio 14.0, Нужно решить нелинейное уравнение 2sin(x)-x+0.4=0 методом секущих...

Решение нелинейного уравнения методом итераций в с++ - C++
Помогите пожалуйста решить нелинейное уравнение x^2-2x-1 = 0 промежуток от 0 до 3. Находил несколько кусков кода но так и не понял как...

Решение нелинейного уравнения методом перебора - C++
Решить уравнение sin(1/x)=0 методом перебора на промежутке x = .

Решение нелинейного уравнения методом итераций - C++
Я не знаю куда кидать, кто поможет сделать эту работу Программа должна вычислять корень нелинейного уравнения методами: простых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.05.2012, 23:39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru