Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с Matlab 
:(
    Опции темы
Guinness
Дата 1.7.2013, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 21.6.2009
Где: Зеленоград

Репутация: нет
Всего: 10



Цитата(stinker @  1.7.2013,  20:26 Найти цитируемый пост)
это нормально? или расчёты ошибочны?

Да я вот что-то тоже не понимаю, почему не получается, сейчас прогоняю. На крестах работало все)
PM MAIL   Вверх
stinker
Дата 1.7.2013, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 1.7.2013

Репутация: нет
Всего: нет



ого, всё разобрался! прям огромнющее спасибо вам!
последний вопрос- как задать повторение итеранции, т.е последней строки?

Добавлено через 1 минуту и 34 секунды
Цитата(Guinness @  1.7.2013,  19:38 Найти цитируемый пост)
Да я вот что-то тоже не понимаю, почему не получается, сейчас прогоняю. На крестах работало все) 

просто итерация метода ньютона даёт приближенное число, при большем повторении число уточняется! я повторил его n-число раз, т.е жал F9 около20 раз и число стало точным ответом!
PM MAIL   Вверх
Guinness
Дата 1.7.2013, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 21.6.2009
Где: Зеленоград

Репутация: нет
Всего: 10



я может что не понимаю, но bitshift что-то не то делает

Добавлено через 49 секунд
Цитата(stinker @  1.7.2013,  20:38 Найти цитируемый пост)
просто итерация метода ньютона даёт приближенное число, при большем повторении число уточняется! я повторил его n-число раз, т.е жал F9 около20 раз и число стало точным ответом!

у меня на первом шаге на плюсах было отличие в 6 знаке
PM MAIL   Вверх
stinker
Дата 1.7.2013, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 1.7.2013

Репутация: нет
Всего: нет



Цитата(Guinness @  1.7.2013,  19:40 Найти цитируемый пост)
я может что не понимаю, но bitshift что-то не то делает

изначально разбирался на двоичных кодах, логическое смещение вправо вроде работает исправно
PM MAIL   Вверх
Guinness
Дата 1.7.2013, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 21.6.2009
Где: Зеленоград

Репутация: нет
Всего: 10



Цитата(stinker @  1.7.2013,  20:43 Найти цитируемый пост)
изначально разбирался на двоичных кодах, логическое смещение вправо вроде работает исправно

Да, это меня переклинило.
PM MAIL   Вверх
stinker
Дата 1.7.2013, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 1.7.2013

Репутация: нет
Всего: нет



может стоит задать цикл?
PM MAIL   Вверх
Guinness
Дата 1.7.2013, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 21.6.2009
Где: Зеленоград

Репутация: нет
Всего: 10



В общем все понятно, мы hex2num переводим в double, а нам нужно в single.
решение
PM MAIL   Вверх
stinker
Дата 1.7.2013, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 1.7.2013

Репутация: нет
Всего: нет



Цитата(Guinness @ 1.7.2013,  19:53)
В общем все понятно, мы hex2num переводим в double, а нам нужно в single.
решение

Тоесть нужно добавить single в hex2num?

Это сообщение отредактировал(а) stinker - 1.7.2013, 19:59
PM MAIL   Вверх
Guinness
Дата 1.7.2013, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 21.6.2009
Где: Зеленоград

Репутация: нет
Всего: 10



Код

x = single(25); 
half = 0.5*x;

strX = num2hex(x);
intX = hex2dec(strX);
magicNum = hex2dec('5f3759df');
i = magicNum - bitshift(intX,-1);
x = typecast( uint32(i) ,'single'); 
res = x*(1.5 - half*x*x);

В общем, вот что получилось.
PM MAIL   Вверх
stinker
Дата 1.7.2013, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 1.7.2013

Репутация: нет
Всего: нет



Цитата(Guinness @ 1.7.2013,  20:02)
Код

x = single(25); 
half = 0.5*x;

strX = num2hex(x);
intX = hex2dec(strX);
magicNum = hex2dec('5f3759df');
i = magicNum - bitshift(intX,-1);
x = typecast( uint32(i) ,'single'); 
res = x*(1.5 - half*x*x);

В общем, вот что получилось.

значит вся проблема была в double
приближенное значение с разницей в 0,0002 smile 
Большое спасибо Вам за помощь и обьяснение!

Это сообщение отредактировал(а) stinker - 1.7.2013, 20:17
PM MAIL   Вверх
Google
  Дата 21.5.2019, 07:30 (ссылка)  





  Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Математические пакеты | Следующая тема »


 




[ Время генерации скрипта: 0.1334 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.