0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 6
1

Табулирование функции через массив

08.04.2015, 23:04. Показов 1906. Ответов 3
Метки нет (Все метки)

Она есть. Она работает. Но то, какие результаты она выдает - не влезает ни в какие мыслимые и немыслимые пределы. Так может кто-нибудь уже встречался с таким и подскажет, в чём ошибка? Возможно, я неправильно обрабатываю массивы, ибо не знаю, как это сделать правильно. Если кому-то нужно вводимые данные - l=0, r=9, eps=0.001. a=-1.37, xn,xk,dx можно брать любые, я брала xn=0.5, xk=7, dx=0.5.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>
#include <iostream>
#include <cmath>
#include <iomanip>
#include <valarray>
using namespace std;
double f(double u) {
return sqrt(2*u)+2*u-6.3;
}
int fz(double d,double k,double z) {
return d*pow(z, 4)+k*log(pow(z, 2)+pow(k,2));
}
int main() {
setlocale(LC_ALL, "Russian");
double l, r, c, eps,b, a, xn, xk, dx, x[100], y[100];
int j,N;
cout << "Введите l:\n"; //решение нелинейного уравнения, начало
    cin >> l;
    cout << "Введите r:\n";
    cin >> r;
    cout << "Введите eps: \n";
    cin >> eps;
while( fabs(f(r) - f(l)) > eps ) {
c = ( l + r ) / 2;
if( f(c) * f(r) < 0 )
l = c;
else
r = c;
}
b=((l + r)/2);
cout << fixed << setprecision(2) << "Корень=" << b << "\n\n"; //решение уравнение, конец. работает отлично.
cout << "Введите a:\n"; //табулирование, начало. работает на получение НЕверных результатов.
    cin >> a;
    cout << "Введите xn:\n";
    cin >> xn;
    cout << "Введите xk:\n";
    cin >> xk;
    cout << "Введите dx:\n";
    cin >> dx;
    j=1;x[j]=xn;
    do
    {
    fz(a,b,x[j]);
    j++;
    x[j]=x[j-1]+dx;
    }
    while (x[j]<=xk);
    cout << "Результаты: \n";
    for (int j = 1; j < N; j++)
    cout<< fixed << setprecision(3) << "x[" << j <<"]=" << x[j] <<' ' << "y[" << j <<"]=" << y[j] <<"\n";
cin.get();
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2015, 23:04
Ответы с готовыми решениями:

Вызов родовой функции (нужно передать массив в качестве аргумента функции через указатель)
#include &lt;iostream&gt; using namespace std; template &lt;class T1&gt; class mas { public: T1 n; T1...

Табулирование заданной функции и определение максимального и минимального значения функции в таблице
Разработать консольное приложение, производящее табулирование заданной функции и определение...

Табулирование функции: рассчитать значение данной функции при изменении аргумента
Табулирование функции: рассчитать значение данной функции при изменении аргумента x на интервале с...

Табулирование заданной функции и определение максимального и минимального значения функции в таблице
Ребята, помогите пожалуйста решить последнюю задача, прямо совсем не как! Разработать консольное...

3
16 / 16 / 11
Регистрация: 23.10.2013
Сообщений: 60
08.04.2015, 23:26 2
поясни хотя бы, что программа делает)

Добавлено через 9 минут
вроде как задаешь точность и отрезок на котором надо искать решение
0
Модератор
Эксперт С++
12129 / 9793 / 5917
Регистрация: 18.12.2011
Сообщений: 26,272
09.04.2015, 11:15 3
Цитата Сообщение от Faolista Посмотреть сообщение
int fz(double d,double k,double z) {
Почему возвращается int?

Цитата Сообщение от Faolista Посмотреть сообщение
43 fz(a,b,x[j]);
C++
1
y[j]=fz(a,b,x[j]);
0
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 6
09.04.2015, 13:04  [ТС] 4
Цитата Сообщение от Ultrafight Посмотреть сообщение
поясни хотя бы, что программа делает)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cout << "Введите a:\n"; //табулирование, начало. работает на получение НЕверных результатов.
* * cin >> a;
* * cout << "Введите xn:\n";
* * cin >> xn;
* * cout << "Введите xk:\n";
* * cin >> xk;
* * cout << "Введите dx:\n";
* * cin >> dx;
* * j=1;x[j]=xn; //счетчику присваиваем 1, первому значению из массива присваиваем xn
* * do
* * {
* * fz(a,b,x[j]); //считаем у от данного х
* * j++; //прокручиваем счетчик на 1
* * x[j]=x[j-1]+dx; //считаем следующий х
* * }
* * while (x[j]<=xk); //и выполняем это все в цикле, пока х не приравняется к xk
* * cout << "Результаты: \n";
    N=floor((xk-xn)/dx)+1; //считаем, сколько значений получилось
* * for (int j = 1; j < N; j++)
* * cout<< fixed << setprecision(3) << "x[" << j <<"]=" << x[j] <<' ' << "y[" << j <<"]=" << y[j] <<"\n";[/quote] //выводим результаты так же в цикле.
Цитата Сообщение от Ultrafight Посмотреть сообщение
вроде как задаешь точность и отрезок на котором надо искать решение
да не смотрите вы на первую часть программы. она нормально работает.

Добавлено через 3 минуты
Цитата Сообщение от zss Посмотреть сообщение
y[j]=fz(a,b,x[j]);
исправила int на double. спасибо, вопрос решён.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2015, 13:04
Помогаю со студенческими работами здесь

Построить таблицу значений для функции. Табулирование функции
Построить таблицу значений для функции f(x)=cos(x) на отрезке с числом разбиений отрезка m=20 ...

Табулирование функции через цикл
Нужно составить программу табулирования функции (через цикл) y = (sinx x + x) / ln x на интервале ...

Табулирование функции через php
Табулирование функции Y = sin3(ax2+bx+p)/(а-х) помогите сделать задачу, очень нужно

Табулирование функции, массив.
1.Составить алгоритм для расчета функции у= (0.95*sin(x)*sin(x)*sin(x))/(1+0.95*x*x*x) при...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru