Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > Математика(геометрия) в Ruby


Автор: Liza1700 25.6.2009, 17:03
Простите за наглость, но я хотела бы чтобы вы мне в этот раз помогли написать 2 программы или хотя бы подсказали какие формулы надо использовать... 

Так как я не сильна в математике(тем более в высшей), но мне не лень если надо разобраться во всем...


Задали мне 3 задачи из которых одну я сделала....

1) Вычислите методом Монте-Карло определенный интеграл от функции ((x + 1) sin(x)) в квадрате
на отрезке [0;Пи] . Ответ округлите до 2 знаков после запятой.

Вот как я решила:
Код

include Math

def f(x)
    return ((x + 1)*sin(x)) ** 2
end

puts "Type summ of values(size of choize)"
n = gets.to_i
h = 5 # haight restriction
a = 0 # left end [a, b]
b = PI # raight end [a, b]
s = (b-a)*h # S restriction

k = 0
for i in 1..n
    x = a + (b-a)*rand
    y = h * rand
    if f(x) >= y then k += 1 end
end

printf("Value of integer = %.2f \n", s*k/n)


А вот с другими задачками... полный вынос!!! я прошу помогите мне их решить

2) Вычислите методом правых прямоугольников площадь фигуры, ограниченной графиком функции y = e(в степени x)*cos(x), осью Оx, прямыми x =0 и x = 1. Ответ округлите до 3х знаков после запятой.


3) Вычислите методом трапеций площадь фигуры, ограниченной графиком функции y = (2x-3)/(x(в квадрате) + 2), осью Ох, прямыми x = 2 и 
x = 5. Ответ округлите до 3 знаков после запятой.

__________________________
Проблема даже не в написании, я просто в голове даже не представляю, что это значит ^^ поэтому очень прошу помочь с этими задачками((( 

Автор: Liza1700 26.6.2009, 08:51
Думала что только я не знаю математики ^^

Поискав в интернете про эти методы я нашла к ним формулы

Используя стандартные соотношения для нахождения площади прямо- 
угольника, получим выражения для приближённого вычисления значения 
определённого интеграла методом правых прямоугольников:

http://ipicture.ru/


Формула метода трапеции

http://ipicture.ru/

И вот, что я написала, после того как их увидела...
Код

include Math

def f(x)
    return e ** x*(cos(x))
end

puts "Type summ of cut"
n = gets.to_i

a = 0
b =       #тут как то надо записать x = 0 и x = 1
delta = (b-a).to_f/n

s = 0
x_i = a
for i in 0..(n-1)
    s += f(x_i)*delta
    x_i +=delta 
end

printf("Size of integrall is %3.f\n", s)


Но естественно оно не работает... так как я не знаю как можно число е(в степени х) записать

Помогите пожалуйста, просто если получиться сделать эту задачу, вторая просто аналогична...

Автор: shine 26.6.2009, 10:02
>я не знаю как можно число е(в степени х) записать
Math::E**x

Автор: Liza1700 26.6.2009, 17:07
shine, 
Спасибо большое, а ты можешь мне помочь хотя бы с одной из этих двух задачек?

Автор: source777 26.6.2009, 21:54
Цитата(shine @  26.6.2009,  10:02 Найти цитируемый пост)
>я не знаю как можно число е(в степени х) записать
Math::E**x 


Согласно принципу наименьшего удивления, лучше так:
Код

  include Math
  exp(x)


Цитата(Liza1700 @  26.6.2009,  08:51 Найти цитируемый пост)
a = 0
b =       #тут как то надо записать x = 0 и x = 1

a и b, это и есть ограничения по x, т.е. a = 0; b=1;

Вот тебе пример решения методом правых прямоугольников:
Код

include Math

def f(x)
  exp(x)*cos(x)
end

puts "Type summ of cut"
n = gets.to_i

a, b = 0, 1
delta = (b-a)/n.to_f
x_i, summ = a, 0

for i in 0...n
  x_i += delta
  summ += f(x_i)
end
res = summ*delta
printf("Size of integrall is %.3f\n", res)

теперь давай сама методом трапеций...

Автор: Liza1700 27.6.2009, 12:31
source777, 

Аааааааа!!!!)))
Спасибо огромное))) теперь для меня не составит труда сделать аналог))))

Автор: source777 27.6.2009, 13:39
Цитата(Liza1700 @  27.6.2009,  12:31 Найти цитируемый пост)
Спасибо огромное))) теперь для меня не составит труда сделать аналог))))

Молодец, уважаю такой подход. Как сделаешь, можешь выложить здесь для оптимизации, как синтаксической, так и алгоритмической.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)